DateTime API将来只输出DAY?PHP


DateTime API only outputs DAY in the future? PHP

如果我向DateTime API发送DAY和TIME(而不是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

我如何让它返回刚刚过去的本周星期四的日期:

Thursday 24th March

下周四不行?

DateTime::__construct()strtotime()使用许多规则来猜测指定不完整或相对日期时的意思。大多数时候你的猜测是对的,但有些规则非常相似,最终结果不是程序员所期望的。

DateTime::createFromFormat()是有限的,它不能理解列表中的所有格式。

您尝试解析相对日期格式。当只指定日期名称时,它被解释为一周中指定日期的下一次出现(请参阅文档中基于日期的符号表下的日期名称条目。)

您可以使用本周的星期四来获得您想要的日期。DateTime::createFromFormat()不理解包含本周参考的相对日期,但DateTime::__construct()理解。

试试这个:

$then = new 'DateTime('Thursday this week 8 PM', $tz);

可以始终对其调用"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');