| 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); // trueA 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; // 1416677222date_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; // 1416691622A 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: 11 let
|
|||
0