1

私はPHPで日付を処理していますが、少し困惑しています

これは私のコードです:

$day = 'Thursday';
$i = 0;
$o_date = new DateTime("2012-09-12 20:56:43 +18 hours");
$date = date_format($o_date, 'l');
$full = date_format($o_date, 'd-m-Y');
if($day!=$date) {
    $date = new DateTime($date . " +1 days");
    $i++;
}
$order_day = new DateTime($full . " +".$i." days");$order_day = date_format($order_day, 'D, d M');
return $order_day;

これが私がやりたいことです:

1)文字列形式の日があります(例:木曜日)

2)注文日があります(例2012-09-12 20:56:43

その日付を取得して、その日を文字列に変換したい(たとえばdate_format($o_date, 'l');、返されるようにWednesday、ifループを作成した注文日から次の木曜日までの日数をカウントしたい。元の日付を取得し、累積日数を追加してから$i、日付を日形式で返します(たとえばThursday, 13 September、何らかの理由でコードが機能していません。誰かがここで間違ったことを確認できますか?

4

2 に答える 2

2

ループの代わりに、数値の日を使用して計算してみませんか。

$day = 'Thursday';
$day_names = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
$day_num = array_search($day, $day_names);
$o_date = new DateTime("2012-09-12 20:56:43 +18 hours");
$o_day_num = $o_date->format('w');
$day_diff = ($day_num - $o_day_num) % 7;
if ($day_diff == 0) { $day_diff = 7; }
$order_day = clone $o_date;
$order_day->add(new DateInterval("P".$day_diff."D"));
于 2012-09-13T06:09:12.887 に答える
1

実際には@Barmarのアイデアの方が好きですが、これが私が思いついたものです...元のコードには、最初の日付のフォーマットや、毎回新しいオブジェクトを作成しているという事実など、多くの問題がありました同じもので作業する代わりに。

ループを使用することを選択した場合は、次のことを試してください。

<?php
$day = 'Thursday';
$i = 0;

// Order Date
$o_date = new DateTime("2012-09-12 20:56:43 +18");
$date = $o_date->format('l');

while($day!==$date) {
  $date = $o_date->add(new DateInterval('P1D'))->format('l');
  $i++;
}
$order_day = $o_date->format('D, d M');
于 2012-09-13T06:19:34.300 に答える