Autor | Zpráva | ||
---|---|---|---|
Milkys Profil |
#1 · Zasláno: 7. 4. 2015, 09:06:44
Dobrý den vážení,
chtěl bych vás požádat o radu, kterou jste už možná někdo řešil. Mám např. formát data: 2014-11-22T21:27:02+01:00 nebo třeba 2015-07-11T14:00:00+02:00 Potřebuji záznamy seřadit podle datumů a časů. strtotime() mi to převede na řetězec, ale už nepřičte + 1 hodinu resp. + 2hodiny. Dalo by se to rozdělit pomocí explode a 1. pole (to co je za "+") předělat na sekundy a přičíst k hodnotě, kterou mi vrátí strtotime(). Zdá se mi to zbytečně složité a proto se ptám. Existuje v php funkce, která timezone automaticky přičítá do unix času. Snad jsem se vyjádřil správně, kdyžžtak mě opravte. Děkuji za reakce. |
||
Tomáš123 Profil |
Milkys:
V náznaku možno niečo také: $celkovy_cas = 2015-07-11T14:00:00+02:00; function prepocet_na_unix_cas($celkovy_cas) { if(strpos($celkovy_cas, "+")) { list($cas, $zona_casu) = explode("+", $celkovy_cas); } else { $zona_casu = 0; } //prepočet dátumu do unixového formátu //prepočet času do unixového formátu (za "T") //prepočet $zona_casu do unixového formátu* //súčet prepočtov return $sucet; } * list($hodiny, $minuty) = explode(":", $zona_casu); $prepocet = $hodiny*3600; EDIT: 1. Funkcia mktime() prepočítava medzi formátmi.
2. Bolo by lepšie rozdeľovať čas až vo funkcii a pridať ošetrenie zóny bez posunu času (funkcia upravená). |
||
Milkys Profil |
Tomáš123:
Děkuji za ochotu. Včera večer jsem procházel manuál a zatím jsem nic nenašel. Zajímá mě právě zda existuje ta "přirozená" funkce. Byl jsem pomalejší :) než přišlo "EDIT". Vyzkouším a dám vědět pro ostatní. Tomáš123: Takto to počítá přesně: $celkovy_cas = "2015-07-11T14:00:00+02:00"; function timezone_plus_unix_cas($celkovy_cas) { if(strpos($celkovy_cas, "+")) { list($cas, $zona_casu) = explode("+", $celkovy_cas); list($hodiny, $minuty) = explode(":", $zona_casu); $prepocet = $hodiny*3600; } else { $zona_casu = 0; } $unix = strtotime($celkovy_cas) + $prepocet; return $unix; } Dá se to použít. Jde mi o jednoduší řešení, aby tam nemuselo být např. 2× explode() ap. Tzn. $unix = prirozena_php_fce($celkovy_cas); |
||
Časová prodleva: 28 dní
|
|||
Tomáš123 Profil |
Milkys:
Prirodzená PHP funkcia na prepočet na unix je mktime() .
|
||
bestik_63 Profil |
ahoj, třída datetime by ti nepomohla?
|
||
Jan Tvrdík Profil |
#6 · Zasláno: 5. 5. 2015, 13:31:35
Milkys:
Já ten problém asi vůbec nechápu, strtotime bere časovou zónu normálně v potaz, např.
echo strtotime('2014-11-22T21:27:02+00:00'), "\n"; echo strtotime('2014-11-22T21:27:02+01:00'), "\n"; echo strtotime('2014-11-22T21:27:02+02:00'), "\n"; vypíše tři různá čísla. |
||
Alphard Profil |
#7 · Zasláno: 5. 5. 2015, 13:36:01
Tomáš123:
„Prirodzená PHP funkcia na prepočet na unix je mktime() .“
Co když je čas mimo rozsah unix timestampu? Unix timestamp není ideální metoda pro reprezentaci data. bestik_63: „ahoj, třída datetime by ti nepomohla?“ Měla by... $t1 = new \Datetime('2014-11-22T21:32:02+01:00'); $t2 = new \Datetime('2014-11-22T21:27:02+01:00'); var_dump($t1 < $t2); // false $t1 = new \Datetime('2014-11-22T21:32:02+02:00'); $t2 = new \Datetime('2014-11-22T21:27:02+01:00'); var_dump($t1 < $t2); // true A ještě poznámky k původnímu dotazu. Milkys: „strtotime() mi to převede na řetězec, ale už nepřičte + 1 hodinu resp. + 2hodiny.“ Možná si nerozumíme, ale mně se zdá, že to dělá, až to, že se má odečítat. (A navíc vrací číslo, ne řetězec.) date_default_timezone_set('Europe/Prague'); echo strtotime('2014-11-22T21:27:02+01:00'), PHP_EOL; // 1416688022 echo strtotime('2014-11-22T21:27:02+02:00'), PHP_EOL; // 1416684422 echo strtotime('2014-11-22T21:27:02+03:00'), PHP_EOL; // 1416680822 echo strtotime('2014-11-22T21:27:02+04:00'), PHP_EOL; // 1416677222 date_default_timezone_set('Europe/Prague'); echo timezone_plus_unix_cas('2014-11-22T21:27:02+01:00'), PHP_EOL; // 1416691622 echo timezone_plus_unix_cas('2014-11-22T21:27:02+02:00'), PHP_EOL; // 1416691622 echo timezone_plus_unix_cas('2014-11-22T21:27:02+03:00'), PHP_EOL; // 1416691622 echo timezone_plus_unix_cas('2014-11-22T21:27:02+04:00'), PHP_EOL; // 1416691622 A ještě jedna drobnost, máte tam chybu, na 9. řádku zřejmě měla být proměnná $prepocet .
Jan Tvrdík [#6]: Už se mi ten můj příspěvek nechtěl mazat :-) |
||
Časová prodleva: 9 let
|
0