我需要能够将DateTime对象设置为当月的某一天。我显然可以通过获取当前月份并创建新DateTime,或检查当前日期并创建DateInterval对象来修改DateTime来实现此目的,但我想给DateTime :: modify提供纯文本参数。
我正在寻找类似的东西:
$datetime->modify('10th day this month');
但这给我一个像
这样的错误PHP警告:DateTime :: modify():无法在位置0(1)处解析时间字符串(本月第10天):第1行的php shell代码中出现意外字符
我似乎无法找到正确的句子结构,以使PHP很好地发挥。
答案 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的答案更好,但我在这里提供它只是作为避免双重呼叫的替代方案。
答案 2 :(得分:1)
我发现这可以节省几微秒来使用setDate()
和format()
来提取当前年份和月份以满足setDate的3个参数(但有点详细)
$date = new /DateTime();
$date->setDate($date->format('Y'), $date->format('m'), 10);