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 日星期日”并且我通过了 SUNDAY,它会给我下周日的日期而不是今天。

任何帮助将不胜感激。

谢谢。

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 回答