作为错误进行验证,有人可以用他的php测试这个:
$timeZone = new DateTimeZone('Europe/Berlin');
$startDate = new DateTime('first day this month 00:00:00', $timeZone);
echo $startDate->format('d.m.Y');
结果:
02.02.2013
我用php 5.2和PHP 5.3进行了测试,结果相同......
作为“决议”,最好的替代方法是什么?
$timeZone = new DateTimeZone('Europe/Berlin');
$startDateAlt = new DateTime('now', $timeZone);
$startDateAlt->setTimestamp(mktime(0, 0, 0, date("m") , 1, date("Y")));
答案 0 :(得分:0)
我认为你错过了first day this month
中的 。尝试:
$timeZone = new DateTimeZone('Europe/Berlin');
$startDate = new DateTime('first day of this month 00:00:00', $timeZone);
echo $startDate->format('r') . PHP_EOL;
答案 1 :(得分:0)
您省略了of
,因此它将其解析为其他内容:
$timeZone = new DateTimeZone('Europe/Berlin');
$startDate = new DateTime('first day of this month 00:00:00', $timeZone);
echo $startDate->format('d.m.Y');
返回
01.02.2013
如果由于某种原因这不起作用(从您的评论中看起来是旧的PHP版本),您可以尝试这个吗?一点点黑客也许......
$startDate = new DateTime();
$days = $startDate->format('d');
$days = $days - 1;
$startDate->modify("-{$day} days");
$startDate->setTime(0,0,0);
echo $startDate->format('d.m.Y');