我想获得明年的第一个星期一,根据我使用的术语,我会得到不同的输出:
$last1 = new \DateTime('first monday of January 2018');
/* outputs: 2018-01-01 (correct) */
$last2 = new \DateTime('first monday of January next year');
/* Outputs 2018-01-02 (wrong) */
因此,每年我都能有效new \DateTime('first monday of January '.date('Y') + 1);
,但这看起来很“脏”。第二个出了什么问题吗?不是说今年第一个星期一是第二个,所以我猜它被解析错了吗?
答案 0 :(得分:1)
来自PHP文档:
相对语句总是在非相对语句之后处理
在第一个表达式上有相对和非相对语句,首先处理“2018”,然后在2018年修改后计算亲属语句“1月的第一天”。
另一方面,第二个表达式仅基于相对语句。 “1月的第一个星期一”将给出今年1月的第一个星期一,然后明年将适用。
您可以使用modify
$last2 = new \DateTime('next year');
$last2->modify('first monday of January');
您的代码也可以使用,您可以选择自己喜欢的代码