Autor | Zpráva | ||
---|---|---|---|
Samm Profil * |
#1 · Zasláno: 31. 3. 2008, 21:46:14
Dobrý den, při přechodu na letní čas se mi začali v aplikaci která hodně využivá data objevovat chyby.
V aplikaci používám hojně strtotime a date. Date se mi zdá být v pořádku, ale strtotime zlobi. Nevíte prosim, jak nastavim v php národní prostředí nebo něco co by přinutilo strtotime aby to počítalo počítalo správně o jednu hodinu méně ? |
||
Ivo Puffer Profil * |
#2 · Zasláno: 1. 4. 2008, 15:50:04
Jak konkrétně to zlobilo? Mně se to stalo také, hlavně když jsem přidával dny. Když jsem dal k datu 29.3.2008 4:00
"+1 day", vyšlo sice 30.3.2008 4:00, ale rozdíl mezi nimi je 82800 sekund, tj. 23. hodin. Takže v tomto případě převést datum na juliánské, přidat k tomu něco a to převést zpět na běžné datum. Kód: function fix($x) { if ($x<0) return -1*floor(-1*$x); return floor($x); } Function jday($year, $month, $day, $hour, $min, $sec, $greg=1) { $a = 10000.0 * $year + 100.0 * $month + $day; If ($a < -47120101) { echo "Warning: date too early for algorithm"; } If ($month <= 2) { $month += 12; $year--; } If ($greg == 0) { $b = -2 + fix(($year + 4716) / 4) - 1179; } else { $b = Fix($year / 400) - Fix($year / 100) + Fix($year / 4); } $a = 365.0 * $year + 1720996.5; $jday = $a + $b + fix(30.6001 * ($month + 1)); $jday = $jday + $day + ($hour + $min / 60 + $sec / 3600) / 24; return $jday; } function JulianToCalendar($julian) { $X = (Float)($julian)+0.5; $Z = floor($X); $F = $X - $Z; $Y = floor(($Z-1867216.25)/36524.25); $A = $Z+1+$Y-floor($Y/4); $B = $A+1524; $C = floor(($B-122.1)/365.25); $D = floor(365.25*$C); $G = floor(($B-$D)/30.6001); $month = ($G<13.5) ? ($G-1) : ($G-13); $year = ($month<2.5) ? ($C-4715) : ($C-4716); $UT = $B-$D-floor(30.6001*$G)+$F; $day = floor($UT); $UT -= floor($UT); $UT *= 24; $hour = floor($UT); $UT -= floor($UT); $UT *= 60; $minute = floor($UT); $UT -= floor($UT); $UT *= 60; $second = round($UT); $ret=array( "year"=>$year, "month"=>$month, "day"=>$day, "hour"=>$hour, "minute"=>$minute, "second"=>$second ); unset($X); unset($Z); unset($F); unset($Y); unset($A); unset($B); unset($C); unset($D); unset($G); unset($UT); return $ret; } |
||
Časová prodleva: 16 let
|
0