【问题标题】:Correct epoch to DateTime conversion正确的纪元到日期时间的转换
【发布时间】:2021-12-20 06:19:51
【问题描述】:

使用此代码:

$epoch=  '1609455600';
$date = new DateTime( '@'.$epoch);
echo $date-> format( 'Y-m-d');

我看到了这个结果2020-12-31。服务器时区报告为 Europe/Zurich(使用 date_default_timezone_get)。但在这个时区,该日期应该是 2021-1-1。

这是怎么回事?

【问题讨论】:

  • 根据documentation:注意:当$datetime 参数是UNIX 时间戳(例如@946684800)或指定时区(例如2010- 01-28T15:00:00+02:00)。所以你可以尝试这样的事情:echo $date->add(DateInterval::createFromDateString($date->getTimeZone()->getOffset($date) . ' seconds'))->format('Y-m-d');
  • 谢谢@tuckbros。日期时间很奇怪

标签: php datetime


【解决方案1】:

除了来自@tuckbros 的评论。 var_export 的输出显示 DateTime 对象的时区为 00:00 (UTC)。

date_default_timezone_set('Europe/Zurich');
$epoch=  '1609455600';

$date = new DateTime( '@'.$epoch);

var_export($date);
/*
DateTime::__set_state(array(
   'date' => '2020-12-31 23:00:00.000000',
   'timezone_type' => 1,
   'timezone' => '+00:00',
)) 
*/

获取本地时间的干净方法是将对象转移到所需的时区(而不是添加任何偏移时间)。

$date->setTimeZone(new DateTimeZone(date_default_timezone_get()));
var_export($date);
/*
DateTime::__set_state(array(
   'date' => '2021-01-01 00:00:00.000000',
   'timezone_type' => 3,
   'timezone' => 'Europe/Zurich',
)) 
*/

您现在可以继续使用 DateTime 对象,因为它具有正确的时区以及正确的本地时间。

【讨论】:

    猜你喜欢
    • 2019-07-02
    • 2017-06-22
    • 2020-02-22
    • 2019-02-04
    • 2019-07-20
    • 1970-01-01
    • 2017-02-07
    • 2018-04-24
    • 2011-12-06
    相关资源
    最近更新 更多