gpt4 book ai didi

PHP:管理 DateTime 的正确方法(时间戳 Y2038 Bug 意识!)

转载 作者:行者123 更新时间:2023-11-29 08:20:51 26 4
gpt4 key购买 nike

在我的“工具箱”中,我正在使用此功能:

function dataAttuale() {
$now = new DateTime();
$dataAttuale = $now->format(DateTime::ISO8601);
$offset = $now->getOffset();
date_default_timezone_set('UTC');
$nowUTC = new DateTime();
$dataUTC = $nowUTC->format(DateTime::ISO8601);
$orario = array();
$orario['dataAttuale'] = $dataAttuale;
$orario['dataUTC'] = $dataUTC;
$orario['offset'] = $offset;
return $orario;
}

我得到了这个数组

Array
(
[dataAttuale] => 2013-10-18T11:03:52+0200
[dataUTC] => 2013-10-18T09:03:52+0000
[offset] => 7200
)

所以我可以在日期时间 MySql 字段中保存引用 UTC 的日期时间。

现在,我遇到了一些麻烦。

1)我还会保存偏移量(以秒为单位)。 什么是最好的Mysql字段?我认为最大秒数可以是 +14hours * 60 * 60 = 50400 和 -12hours*60*60 = -43200

2)您认为节省也抵消了值得注意的事情吗?即,例如,多个 API 服务返回 UTC + 偏移量格式的日期...

非常感谢!

更新:

谢谢两位。现在我以 UTC 格式和 varchar 时区保存 MySQL 日期时间。通过一些代码,我得到了我想要的:

$orario = new DateTime($value['creazione'], new DateTimeZone($value['timezone']));
$orario = $orario->format(DateTime::ISO8601);

输出为(欧洲/罗马)

2013-10-19T09:27:54+0200

对于美国/蒙特利尔

2013-10-19T09:29:16-0400

澳大利亚/墨尔本

2013-10-19T09:30:31+1100

(分钟//秒的差异是在我的 PHP 脚本中更改默认时区的时间)。

现在我认为:

1) 我可以 mock Y2038 bug,放弃(叹息:( ) 时间戳:(

2) 我可以安全地环游世界并使用我自己的日历(naaaa...当然,我将永远使用 Google 日历)

最佳答案

保存偏移量没有多大意义。您可能对时间戳感兴趣的两个可能值:

  1. 一般全局时间戳,例如“世界标准时间 2013 年 9 月 6 日凌晨 12:52 的时间点”
  2. 某个时间点的特定本地时间,例如“2012 年 12 月 19 日 17:34,菲律宾马尼拉”

请注意,这两者实际上是同一件事,它们以特定位置或时区的挂钟时间和日期的表示法表达时间点。唯一的区别是 UTC 是相对于其他时区偏移量表示的指定标准“位置”;但菲律宾的马尼拉没有理由不能用于同样的目的。

因此,当您想存储绝对时间戳时,您可以:

  1. 决定将您的所有时间存储在特定时区(例如 UTC)中,并仅存储该时间戳
  2. 确定您对特定本地时间感兴趣并存储时间戳及其时区

无论哪种方式,您都需要时间戳,并且需要知道它位于哪个时区。在 1. 中,您提前决定所有时间戳都位于同一定义的时区中,并且不需要存储它,在 2. 中,您显式保存该时区信息。

偏移量并不是一个好存储的东西,因为它全年都会变化。夏季的偏移量可能比 UTC 多 6 小时,但冬季可能多 7 小时。如果您稍后需要对本地时间进行日期计算,则偏移量会产生误导并且对您没有多大帮助。如果您知道所讨论的时区,则可以在以后获取一年中任何时间的偏移量。

MySQL 不支持 DATETIME + TIMEZONE 字段(例如 Postgres 就支持),因此您需要将时区(例如“欧洲/柏林”)存储在单独的文本字段中。如果您根本不需要将时间戳与特定位置关联起来,那么就不需要时区,您只需要存储标准化时间戳,例如标准化为 UTC。

关于PHP:管理 DateTime 的正确方法(时间戳 Y2038 Bug 意识!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19445916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com