3

日付が正しいように見えたので、ひびが入ったと思った週ごとのビューを持った日記を作成しています。私のMySQLクエリがランダムな結果のように見えたものを返し続けるまで、月が実際には日として見られていることに気づきました。

$week_number = date("W");
$year = date("Y");

for ($day=0; $day<=6; $day++) {
    $daily_date = date('d/m/Y', strtotime($year."W".$week_number.$day))."\n";
    $StartDate = date('d', strtotime($daily_date));
}

echo $starteDate;

$startDate日ではなく月の数を返し、月ではなく日を返すのは確実date('m', strtotime($daily_date))です。

このばかげた間違いをどこで犯したのか理解できないので、助けていただければ幸いです。

4

2 に答える 2

4

これは、日付のアメリカ化によるものです。strtotime は日付を d/m/Y ではなく m/d/Y として読み取ります。

日付のISOは Ymd であり、簡単にするために、あらゆる種類の日付操作を行うときにこの形式を使用します。

于 2012-09-03T16:56:48.573 に答える
1

そのコードは恐ろしいです。日付を文字列に複数回変換しています。$year . w. $week_number.etc...値を取得して文字列に変換し、その文字列を日付に戻して日の値を抽出する理由はまったくありません。

同様に、d/m/Y は日付転送に使用するには恐ろしい形式です。それは 2001 年 2 月 3 日ですか?2002 年 3 月 1 日? それを理解できない場合、strtotime がより優れていることをどのように期待できますか? それはかなり賢いですが、全知全能ではありません。年を 4 桁にすると多少は楽になりますが、それでもd/mvsのm/d混乱に陥る可能性があります。

なぜ単純に

$StartDate = date('d', strtotime($year."W".$week_number.$day));

またはさらに良いことに、DateTimeクラスを使用して適切なDateIntervalを選択します

于 2012-09-03T16:56:37.840 に答える