【发布时间】:2019-01-04 18:20:54
【问题描述】:
我正在使用在 Ubuntu 服务器上运行的 Laravel 5.5。
服务器时区设置为 EEST。
Laravel 时区设置在 config/app.php 到 'timezone' => 'Europe/Sofia',
这里(欧洲/索非亚)夏令时从 3 月 25 日 03:00 开始,到 10 月 28 日 04:00 结束。
当我运行以下代码时:
$datetime = Carbon::createFromDate(2018, 3, 24);
$datetime->hour = 23;
$datetime->minute = 0;
$datetime->second = 0;
dump($datetime);
foreach (range(1,12) as $v) {
$datetime->addHour(1);
echo $datetime.'<br /> ';
}
我得到了预期的输出(缺少 03:00 小时):
Carbon @1521925200 {#505 date: 2018-03-24 23:00:00.0 Europe/Sofia (+02:00)}
2018-03-25 00:00:00
2018-03-25 01:00:00
2018-03-25 02:00:00
2018-03-25 04:00:00
2018-03-25 05:00:00
2018-03-25 06:00:00
2018-03-25 07:00:00
2018-03-25 08:00:00
2018-03-25 09:00:00
2018-03-25 10:00:00
2018-03-25 11:00:00
2018-03-25 12:00:00
现在,当我将日期设置为 DST 结束时:
$datetime = Carbon::createFromDate(2018, 10, 27);
$datetime->hour = 23;
$datetime->minute = 0;
$datetime->second = 0;
dump($datetime);
foreach (range(1,12) as $v) {
$datetime->addHour(1);
echo $datetime.'<br /> ';
}
输出是:
Carbon @1540670400 {#211 date: 2018-10-27 23:00:00.0 Europe/Sofia (+03:00)}
2018-10-28 00:00:00
2018-10-28 01:00:00
2018-10-28 02:00:00
2018-10-28 03:00:00
2018-10-28 04:00:00
2018-10-28 05:00:00
2018-10-28 06:00:00
2018-10-28 07:00:00
2018-10-28 08:00:00
2018-10-28 09:00:00
2018-10-28 10:00:00
2018-10-28 11:00:00
现在我预计第 3 个小时会出现两次。 如果这是 Carbon addHour() 的正确输出,是否有一种在 DST 开始和结束期间获取日期时间的好方法?
【问题讨论】:
标签: php laravel dst php-carbon