如果我像这样向DateTime API发送一天和一天(不是DATE):
$tz = new \DateTimeZone("UTC");
$now = new \DateTime("now", $tz);
$then = \DateTime::createFromFormat('l g A', 'Thursday 8 PM', $tz);
目前 3月26日星期六,当时回复如下:
echo $then->format('l jS, F');
将返回:
Thursday 31st, March
如何让它在刚刚过去的CURRENT周中返回星期四的日期:
Thursday 24th March
不是下周四?
答案 0 :(得分:2)
DateTime::__construct()
和strtotime()
使用a lot of rules来猜测您指定不完整或相对日期时的含义。大多数时候你的猜测正确,但有些规则非常相似,最终的结果不是程序员所期望的结果。
DateTime::createFromFormat()
是有限的,它无法理解列表中的所有格式。
您尝试解析relative date format。仅指定日期名称时,它将被解释为指定星期几的下一次出现(请参阅基于日期的表示法表中的日期名称条目documentation。)
您可以使用本周四来获取所需的日期。 DateTime::createFromFormat()
并不了解包含对本周的引用的相对日期,但DateTime::__construct()
确实如此。
试试这个:
$then = new \DateTime('Thursday this week 8 PM', $tz);
答案 1 :(得分:0)
总是可以拨打' sub'方法,减去7天。
$tz = new \DateTimeZone("UTC");
$now = new \DateTime("now", $tz);
$then = \DateTime::createFromFormat('l g A', 'Thursday 8 PM', $tz);
$then->sub(new DateInterval('P7D'));
echo $then->format('l jS, F');