0

作为一个错误的验证,有人可以用他的 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")));
4

2 回答 2

0

我认为你错过in 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;
于 2013-02-01T12:51:23.560 回答
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');
于 2013-02-01T12:51:40.987 回答