我在找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;
}