Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中获取与DST无关的时间戳_Php_Datetime_Timezone_Dst - Fatal编程技术网

如何在php中获取与DST无关的时间戳

如何在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

我想让用户选择是否遵循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
    [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-您应该