DateTime API将来只输出DAY? PHP

时间:2016-03-26 13:23:42

标签: php datetime

如果我像这样向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

不是下周四?

2 个答案:

答案 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');