如何使用DateTime::modify将当前月份的特定日期作为目标


How do I target a specific day of the current month with DateTime::modify?

我需要能够将DateTime对象设置为当前月份的某一天。很明显,我可以通过获取当前月份并创建新的DateTime,或者检查当前日期并创建DateInterval对象来修改DateTime来实现这一点,但我只想为DateTime::modify提供纯文本参数。

我在找这样的东西:

$datetime->modify('10th day this month');

但这给了我一个类似的错误

PHP警告:DateTime::modify():无法解析位置0(1)处的时间字符串(本月第10天):第1行上PHP shell代码中的意外字符

而且我似乎找不到正确的句子结构来让PHP发挥得很好。

不可能直接获得给定月份的第X天,但您可以通过一个简单的解决方法来实现这一点:

$datetime->modify('last day of previous month')->modify('+10 day');

另一种选择是:

$datetime->format('Y-m-10');

如果必须使用DateTime::modify(),则此解决方法可能适合您:-

$date = new 'DateTime();
$date->modify($date->format('Y-m-10'));

虽然这可能不会比Amal的答案更好,但我在这里提供它只是为了避免双重呼叫。

演示

我发现使用setDate()format()提取当前年份和月份可以节省几微秒,以满足setDate的3个参数(但有点冗长)

$date = new 'DateTime();
$date->setDate($date->format('Y'), $date->format('m'), 10);