У меня есть календарь, который показывает мне неправильные дни даты для дня недели. Более конкретно, они на один день отстают от фактической даты.
Я провел кучу исследований и использовал следующий вопрос (php date (‘d’) вычисляет один и тот же результат в течение двух дней подряд) но я не могу заставить его работать над моим сценарием.
В настоящее время он отображает 26 октября дважды, оттуда даты идут неправильно.
$firstday = mktime(0,0,0,$month,1,$year);
$day = date('Y-m-d',$firstday);
$fday = strtotime($day." last Sunday ",$firstday);
$currday_timestamp = mktime(0,0,0,date('m'),date('d'),date('Y'));
for($i=0;$i<7;$i++) {
$firstweek[$i]['id'] = date("Y-m-d",$fday+(86400 * $i));
$firstweek[$i]['val'] = date("d",$fday+(86400 * $i));
if($currday_timestamp > $fday+(86400 * $i)) {
$firstweek[$i]['flag'] = 1;
}
$secondweek[$i]['id'] = date("Y-m-d",$fday+(86400 * ($i+7)));
$secondweek[$i]['val'] = date("d",$fday+(86400 * ($i+7)));
if($currday_timestamp > $fday+(86400 * ($i+7))) {
$secondweek[$i]['flag'] = 1;
}
$thirdweek[$i]['id'] = date("Y-m-d",$fday+(86400 * ($i+14)));
$thirdweek[$i]['val'] = date("d",$fday+(86400 * ($i+14)));
if($currday_timestamp > $fday+(86400 * ($i+14))) {
$thirdweek[$i]['flag'] = 1;
}
$fourthweek[$i]['id'] = date("Y-m-d",$fday+(86400 * ($i+21)));
$fourthweek[$i]['val'] = date("d",$fday+(86400 * ($i+21)));
if($currday_timestamp > $fday+(86400 * ($i+21))) {
$fourthweek[$i]['flag'] = 1;
}
$fifthweek[$i]['id'] = date("Y-m-d",$fday+(86400 * ($i+28)));
$fifthweek[$i]['val'] = date("d",$fday+(86400 * ($i+28)));
if($currday_timestamp > $fday+(86400 * ($i+28))) {
$fifthweek[$i]['flag'] = 1;
}
$sixthweek[$i]['id'] = date("Y-m-d",$fday+(86400 * ($i+35)));
$sixthweek[$i]['val'] = date("d",$fday+(86400 * ($i+35)));
if($currday_timestamp > $fday+(86400 * ($i+35))) {
$sixthweek[$i]['flag'] = 1;
}
}
Как бы я решил проблему с високосными секундами? Есть ли значение, которое мне нужно добавить к секундам?
Похоже, это связано с переходом с летнего времени на стандартное время.
Самый простой способ — добавить пару часов к базовому времени:
$time_offset = 2 * 60 * 60; // 2 hours
$firstday = mktime(0,0,0,$month,1,$year) + $time_offset;
$day = date('Y-m-d',$firstday);
$fday = strtotime($day." last Sunday ",$firstday) + $time_offset;
$currday_timestamp = mktime(0,0,0,date('m'),date('d'),date('Y')) + $time_offset;
Других решений пока нет …