php - 正确的纪元到日期时间的转换
问题描述
使用这段代码:
$epoch= '1609455600';
$date = new DateTime( '@'.$epoch);
echo $date-> format( 'Y-m-d');
我看到了这个结果2020-12-31
。服务器时区报告为Europe/Zurich(带有date_default_timezone_get
)。但在这个时区,该日期应该是 2021-1-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 对象,因为它具有正确的时区以及正确的本地时间。
推荐阅读
- javascript - 每次我尝试访问 CashRegister.purchaseItem 方法时,它都会说无法读取属性
- angular - 组件实例变量值未在订阅 Angular 7 内更新
- reactjs - 学习 React:为什么我们不必在第 18 行使用 this.state.count 来访问计数,但我们必须在第 12 行使用 this.state.imageUrl?
- azure-virtual-network - Azure 区域 VNet 集成和服务终结点
- sql - 如何获取在所有期间具有非空值但在同一公司的其他文档中不存在的行?
- azure-cognitive-search - 带有单个文档的 IndexBatch 操作会抛出 IndexBatchException 吗?
- python - 关于 Python 上的均值和二维数组的问题
- c# - 我需要从批处理文件的输出中获取包含某个单词的行,并将其保存为 C# 中的字符串。我该怎么做?
- c# - Unity C#:多次更改标签状态
- oracle - 过程、游标和触发器可以在对象关系数据库的用户定义类型中使用吗?