用PHP相对时间格式将一周的开始从太阳改为星期一


Change start of week from Sun to Mon with PHP Relative Time Formats

我有一个函数在PHP中使用strtotime()和相对时间格式,应该返回一周的第一天,但它被自动设置为星期日而不是星期一。有什么办法可以改变这一点吗?

function start_of_week() {
    $monday = strtotime('monday this week');    
    return date("Y-m-d", $monday);
}

例如今天是11号星期天,上面的函数返回明天的日期,而明天应该是星期一下一个星期

我想这对你有用。

function start_of_week()
{
    $monday = strtotime('monday this week');
    $today_day = date('D');
    if($today_day != "Mon")
        $start_of_week = date('Y-m-d', strtotime("last monday"));
    else
        $start_of_week = date("Y-m-d", $monday);
    return $start_of_week ;
}

我认为这是你需要的,参数startFrom被初始化为星期一,如果你喜欢,你可以改变这一点,但我认为你可能需要调用这个函数以后使用默认的开始日期。相反,调用start_of_week(2)将星期二设置为一周的第一天,因此您现在需要使用start_of_week(7)

function start_of_week($startFrom=1) {
    $dateTime =new DateTime(); // today
    $diff = ($startFrom - $dateTime->format('N'));
    if ($diff > 0) { $diff -= 7; }
    $dateTime->modify("$diff days");
    return $dateTime->format('Y-m-d');
    }
    echo start_of_week(7);

我试了下一个,一切正常:

$monday1 = strtotime("monday this week");
$monday2 = strtotime("next monday");
$monday3 = strtotime("monday next week");    
echo '<br>'.date("Y-m-d", $monday1); // output : 2014-05-12
echo '<br>'.date("Y-m-d", $monday2); // output : 2014-05-12
echo '<br>'.date("Y-m-d", $monday3); // output : 2014-05-19
那么,你的问题在哪里?