PHP日期/格林威治标准时间的怪异



要么我失去了理智,要么我不知道自己在做什么。 我倾向于后者。

我正在尝试转换这个: 1316826000, 我很有信心应该是 星期六, 24 九月 2011 01:00:00 GMT

http://www.onlineconversion.com/unix_time.htm 证实了这一点。

http://www.unixtimestamp.com/index.php 告诉我 09/23/11 @ 8:00:00pm EST,到目前为止一切顺利。我碰巧在 EST,这是我想从 PHP 回来的结果。

当我做日期('l, M d, Y, h:ia', $iTime(,我得到:星期五,九月23,2011,12:00am,整整20小时休息。

我已经使用 date('c'( 确认服务器的时间是正确的。 date('c'( 输出为:2012-05-19T03:19:20+00:00。 服务器位于中部时区,当前为晚上 10:20。五月 18.

echo date_default_timezone_get(( 输出 "GMT"(使用 date_default_timezone_set('GMT'(在脚本中的其他位置设置(

我错过了什么? 到目前为止,我读到的任何内容都无法解释我如何获得的结果比应有的结果晚 20 小时。 是一个小时快还是慢,我至少可以理解它是某种 DST 白痴,但是 20 个? 疯了! 感谢您的阅读!

检查你的php.ini对date.timezone说什么。在 unix 中,它通常在这里: /etc/php.ini然后使用 PHP 识别的正确时区:http://www.php.net/manual/en/timezones.php

date.timezone = 'America/New_York'

然后重新加载您的 Web 服务器。

Unix 时间只是意味着自纪元以来的秒数。 与时区无关。时区只需从 unix 时间中增加或减去 1 小时(3600 秒(,即可离开 GMT 的每个区域。举个例子:

$userTimezone = new DateTimeZone('America/New_York');
$gmtTimezone = new DateTimeZone('GMT');
$myDateTime = new DateTime('2014-01-22 11:44', $gmtTimezone);
$offset = $userTimezone->getOffset($myDateTime);
echo $offset;

这将输出:-14400 或 4 小时。这就是纽约和格林威治标准时间的区别

在 Joda-Time 2.3 库中使用一些 Java 代码,因为我不知道 PHP...

long m = 1316826000L;
DateTime dateTimeUtc = new DateTime( m * 1000L, DateTimeZone.UTC );
DateTime dateTimeNewYork = dateTimeUtc.toDateTime( DateTimeZone.forID( "America/New_York" ) );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeNewYork: " + dateTimeNewYork );

我可以告诉你,从 1970 UTC/GMT(Unix 时代(开始的 1316826000 秒是......

dateTimeUtc: 2011-09-24T01:00:00.000Z
dateTimeNewYork: 2011-09-23T21:00:00.000-04:00

因此,正如评论者所说,美国东部时间将是晚上 8 点,但当天美国东部标准时间没有生效。DST(夏令时((白痴,正如您正确指出的那样(一直有效到当年(2011 年(的 11 月 9 日。因此,一天中的时间被提前一小时,到晚上 9 点。

在格林威治标准时间/UTC 中,这意味着第二天早上 1 点。

美国东海岸的标准时间比 UTC/GMT 晚 5 小时。使用夏令时,它比 UTC/GMT 晚 4 小时(接近一小时(。

你感到困惑的地方:

  • 您的时间格式/转换不正确
    我无能为力,因为我不懂 PHP。
  • 您应该使用一个称职的日期时间库来完成此类工作。
    日期时间工作复杂、棘手、令人困惑且容易出错。
    这个问题讨论了Joda-Time(Java(类型的PHP库的可能性。
  • 您使用了三个字母的时区代码。避免这些
    这些代码既不是标准化的,也不是唯一的——有常见的重复。请改用正确的时区名称。在美国东海岸的情况下,"美国/New_York"。此外,在本例中,您将时区区域和规则(美国东海岸(与这些规则的特定应用(EST(混淆了。说"美国/New_York"意味着"该日期生效的任何时区规则,而说"EST"(如果解释为美国东部标准时间(意味着"UTC-05:00"。因此,要么 (a( 使用时区名称,例如"America/New_York",要么 (b( 使用特定的偏移量,例如"-05:00"。

相关内容

  • 没有找到相关文章

最新更新