ウィークリー ビュー カレンダーを作成していますが、時計が進む 10 月 28 日になると問題が発生します。カレンダーが1日ずれます
これまでの私のコード...
//get viewed date from form and add either a week to it or take a week away
if(isset($_POST['add_week'])){
$last_week_ts = strtotime($_POST['last_week']);
$display_week_ts = $last_week_ts + (3600 * 24 * 7);
} else if (isset($_POST['back_week'])) {
$last_week_ts = strtotime($_POST['last_week']);
$display_week_ts = $last_week_ts - (3600 * 24 * 7);
} else {
//sets the current day as the first day of the week so no good
/*$display_week_ts = floor(time() / (3600 * 24)) * 3600 * 24;*/
//Does't account for british summer time so days are out after 28th October
$display_week_ts = strtotime("Monday noon");
}
$week_start = new DateTime(date("Y-m-d", $display_week_ts));
for ($i = 0; $i < 7; $i++)
{
echo '<td class="day">';
$current_day_ts = $display_week_ts + ($i * 3600 *24);
$daily_date = date('d-m-Y', $current_day_ts);
$StartDate = date('d', $current_day_ts);
$MonthName = date('m', $current_day_ts);
$Year = date('Y', $current_day_ts);
echo $daily_date;
echo '</td>';
}
$week_start には、現在カレンダーに表示されている週の始まりの値が含まれています。初めて開くと、現在の週が表示されます。次の週のボタンが押された場合、$week_start 値に 1 週間が追加されます。現在、テーブルの非表示フィールドに保存され、送信時にポストバックされます。$week_start を TimeDate() オブジェクトとしてセッションに格納しようとしました
$week_start = new DateTime(date("Y-m-d", $display_week_ts));
$S_SESSION['week_start'] = $week_start;
しかし、セッションをコールバックして使用しようとすると、1週間前に移動します
$week_start = $S_SESSION['week_start'];
$week_start->modify('+1 week');
「警告: DateTime::modify() [datetime.modify]: DateTime オブジェクトがコンストラクターによって正しく初期化されていません」というエラーが表示されます。掘り下げた後、DateTimeは5.3までセッションをサポートしていないようで、5.2.17を使用していることがわかりました
BST が問題を引き起こさないように、変数 $week_start を $display_week_ts で表される週の最初の曜日にする方法を誰かが教えてくれたら本当にありがたいです。私はこれに3日間しっかりと取り組んできました