如何使用DateTime :: modify定位当月的特定日期?

时间:2013-11-22 15:54:52

标签: php datetime

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

我正在寻找类似的东西:

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

但这给我一个像

这样的错误
  

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

我似乎无法找到正确的句子结构,以使PHP很好地发挥。

3 个答案:

答案 0 :(得分:11)

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

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

另一种选择是:

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

答案 1 :(得分:3)

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

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

虽然它可能没有比Amal的答案更好,但我在这里提供它只是作为避免双重呼叫的替代方案。

Demo

答案 2 :(得分:1)

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

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