如何在php中获取与DST无关的时间戳
我想让用户选择是否遵循DST。我尝试了CST和CST6CDT时区,但两者都给出了相同的结果如何在php中获取与DST无关的时间戳,php,datetime,timezone,dst,Php,Datetime,Timezone,Dst,我想让用户选择是否遵循DST。我尝试了CST和CST6CDT时区,但两者都给出了相同的结果 php > $tz = new DateTimeZone('CST'); php > php > $d = new DateTime('now', $tz); php > print_r($d); DateTime Object ( [date] => 2013-10-16 08:34:53 [timezone_type] => 3 [time
php > $tz = new DateTimeZone('CST');
php >
php > $d = new DateTime('now', $tz);
php > print_r($d);
DateTime Object
(
[date] => 2013-10-16 08:34:53
[timezone_type] => 3
[timezone] => America/Chicago
)
php >
php > $tz = new DateTimeZone('CST6CDT');
php >
php > $d = new DateTime('now', $tz);
php > print_r($d);
DateTime Object
(
[date] => 2013-10-16 08:35:21
[timezone_type] => 3
[timezone] => CST6CDT
)
php >
有没有办法不用DST就能得到时间戳?我在这里做错了什么吗?现在CST在DST中(除了我,在萨斯喀彻温省,我们没有观察DST)。所以CST和CDT现在在技术上是同时进行的。如果您在11月中旬DST切换发生时再次尝试此操作,您将得到不同的时间
请尝试使用
GMT-6
,这将获得cst类型的时间,与DST无关,因为GMT区域不依赖于DST。cst现在在DST中(除了我,在萨斯喀彻温省,我们没有观察到DST)。所以CST和CDT现在在技术上是同时进行的。如果您在11月中旬DST切换发生时再次尝试此操作,您将得到不同的时间
尝试使用GMT-6
,这将获得cst类型的时间,与DST无关,因为GMT区域不依赖于DST。PHP使用。在该数据中,诸如“CST”
和“CST6CDT”
等值的存在只是为了向后兼容POSIX时区。除非绝对必要,否则不应使用它们
报告明确指出:
警告
请不要使用此处列出的任何时区(UTC除外),它们的存在只是出于向后兼容的原因
您应该使用“America/Chicago”
来表示美国中部时区
您可以在中阅读有关IANA时区数据库的更多信息
对于时区标识符来说,“CST”是一个不好的选择,部分原因是时区缩写可能模棱两可。“CST”可能代表“中央标准时间”,但可以是美国中央时间或澳大利亚中央时间。它也可以代表“古巴标准时间”或“中国标准时间”
即使您知道它在美国,“CST6CDT”也不是一个很好的标识符,因为它没有考虑到美国的DST规则在2007年发生了变化
关于你的评论:
我想让用户选择是否遵循DST
这是一种代码气味。每当您在网站上看到DST[是/否]复选框时,这都是应用程序未正确使用时区的明显迹象。当用户选择“美国/芝加哥”或“美国/洛杉矶”或“欧洲/伦敦”等时区时,时区数据库中的信息将已经知道是否遵循DST以及何时进行。DST在世界各地的许多不同时间启动和停止,因此让数据库得到正确使用是至关重要的。PHP使用。在该数据中,诸如“CST”
和“CST6CDT”
等值的存在只是为了向后兼容POSIX时区。除非绝对必要,否则不应使用它们
报告明确指出:
警告
请不要使用此处列出的任何时区(UTC除外),它们的存在只是出于向后兼容的原因
您应该使用“America/Chicago”
来表示美国中部时区
您可以在中阅读有关IANA时区数据库的更多信息
对于时区标识符来说,“CST”是一个不好的选择,部分原因是时区缩写可能模棱两可。“CST”可能代表“中央标准时间”,但可以是美国中央时间或澳大利亚中央时间。它也可以代表“古巴标准时间”或“中国标准时间”
即使您知道它在美国,“CST6CDT”也不是一个很好的标识符,因为它没有考虑到美国的DST规则在2007年发生了变化
关于你的评论:
我想让用户选择是否遵循DST
这是一种代码气味。每当您在网站上看到DST[是/否]复选框时,这都是应用程序未正确使用时区的明显迹象。当用户选择“美国/芝加哥”或“美国/洛杉矶”或“欧洲/伦敦”等时区时,时区数据库中的信息将已经知道是否遵循DST以及何时进行。DST在世界各地的许多不同时间启动和停止,因此让数据库得到正确使用是至关重要的。只是一个满足我好奇心的问题:你为什么需要这个?好吧,这就是我得到的项目要求。只是一个满足我好奇心的问题:你为什么需要这个?好吧,这是我得到的项目要求。是的,得到了。这是一种选择,但我认为可能有一种更聪明的方法。将所有日期存储为UTC,然后转换为用户在其首选项中选择的任何时区。如果您接受用户的输入,则假设它在他们的时区内,并在存储它之前转换为UTC。不能这样做,因为应用程序已经在生产中,而且我们的数据库中有大量数据。所以,更改当前逻辑将使所有现有数据出错。@MarcB-您应该说“中心时间”现在在DST中。“中央标准时间”明确表示无DST。例如,亚利桑那州永久性地使用MST“山地标准时间”(UTC-07:00),而其余的“山地时间”目前遵循“山地昼时”(UTC-06:00)。说“MST==MDT”是不合适的。是的,我明白了。这是一种选择,但我认为可能有一种更聪明的方法。将所有日期存储为UTC,然后转换为用户在其首选项中选择的任何时区。如果您接受用户的输入,则假设它在他们的时区内,并在存储它之前转换为UTC。不能这样做,因为应用程序已经在生产中,而且我们的数据库中有大量数据。因此,更改当前逻辑将使所有现有数据出错。@MarcB-您应该