2
function dayDate($day) {
    $dayArr = array(
            0 => 'MONDAY',
            1 => 'TUESDAY',
            2 => 'WEDNESDAY',
            3 => 'THURSDAY',
            4 => 'FRIDAY',
            5 => 'SATURDAY',
            6 => 'SUNDAY'
        );

        $sunday = mktime(0, 0, 0, date('m'), date('d')+(1-date('w')), date('Y'));

        $n  = array_search("$day",$dayArr);
        $date   = date('m-d-Y', $sunday+$n*60*60*24);

    return $date;
}

上記の関数を使用して平日(月曜日など)を現在の週の日付に変換しています。この関数をループで使用し、「SUNDAY」「MONDAY」のように$ dayを渡すと、日付が返されます。しかし、何らかの理由で、最初の日曜日がありません。

たとえば、今日の「2012年4月22日日曜日」で、日曜日を通過すると、今日ではなく次の日曜日の日付が表示されます。

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

6

strtotime()これには魔法を使うことができます:

function dayDate($day) {
    return date('m-d-Y', strtotime('next ' . $day));
}

ただし、代わりにPHP のネイティブDateTimeクラスを使用することを検討してください。

function dayDate($day) {
    return new DateTime('next ' . $day);
}

$nextMonday = dayDate('Monday');
echo $nextMonday->format('m-d-Y'); // 04-30-2012

オブジェクトを使用するDateTimeと、その場で変更する必要がある場合に備えて、メソッド/関数からハードコードされた日付形式を削除できることに加えて、かなりきちんとしたことができます。

于 2012-04-23T14:25:50.657 に答える