【问题标题】:Carbon setting timezone does not change timestamp valueCarbon设置时区不改变时间戳值
【发布时间】:2021-05-21 22:15:57
【问题描述】:

我正在尝试从 Carbon / Laravel 中的不同时区获取时间戳。有些东西会改变,但时间戳不会改变(无论我使用->format('U') 还是->timestamp

<?php

$datestring = '2021-05-29';
$date = \Carbon\Carbon::parse($datestring);

echo $date->format('H:i') . '<br>';
echo $date->timezone('Europe/London')->format('H:i') . '<br>';

echo $date->format('U') . '<br>';
echo $date->timezone('Europe/London')->format('U') . '<br>';

?>

结果:

00:00
01:00
1622246400
1622246400

游乐场:https://laravelplayground.com/#/snippets/a62f40ea-38a8-4145-9851-5d061905cfa0

【问题讨论】:

    标签: laravel datetime php-carbon


    【解决方案1】:

    UTC 以外时区的时间戳不存在。

    Timestamp 的定义是秒数,因为 January 1st 1970 midnight UTC "UTC" 实际上明确地在定义中,它旨在表示一个通用的时间点,这就是需要它的原因。如果您自其他日期(例如 1970 年 1 月 1 日 GMT-5)以来的秒数不是时间戳,它只是属于您的业务逻辑的任意时刻的秒数,您可以通过以下方式获得它:

    $date->diffInSeconds('1970-01-01 00:00:00 -05:00');
    

    但请注意,必须这样做是应用程序本地化不良的必然迹象。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 2014-12-23
      • 2016-01-30
      • 2014-10-15
      • 1970-01-01
      相关资源
      最近更新 更多