我如何找到以下字符串日期格式:"星期一或之前5月24日$Year"通过DateTime strtot


how can i find the following string date format:"Monday on or before May 24 $Year" via DateTime strtotime

我在找Victoria Day。放假日期为:"5月24日星期一或之前"

我找不到DateTime可以接受的正确格式。

当我尝试运行这段代码时,我得到一个致命错误:

致命错误:未捕获的异常' exception '带有消息DateTime::__construct():解析时间字符串(星期一或星期一)失败在2015年5月24日之前)在位置7 (o):无法找到时区在数据库

if ($GYear >= 1845) {
                $VictoriaDay = new DateTime("Monday on or before May 24 $GYear", new DateTimeZone("UTC"));
                $VictoriaDay_Day = $VictoriaDay->format('j');
                if ($GDay == VictoriaDay_Day) {
                    return "Victoria Day";
                }
            }

关于如何通过DateTime得到这个日期,有什么建议吗?thianks !

您最好使用'DateTime::modify()函数。像这样的东西应该适合:-

function getVictoriaDay($year = null)
{
    if(!$year){
        $year = (int)(new 'DateTime())->format('Y');
    }
    $victoriaDay = new 'dateTime("$year-05-24");
    if($victoriaDay->format('D') !== 'Mon'){
        $victoriaDay->modify('previous monday');
    }
    return $victoriaDay;
}
演示

你可以试试:

function victoria_day() {
    $t = strtotime('May 25');
    return $t - (date("N")-1)*24*60*60;
}