【问题标题】:PHP date timestamp timezone not converted properlyPHP日期时间戳时区未正确转换
【发布时间】:2014-10-30 22:38:11
【问题描述】:

所以我有这个代码:

$timestamp = 1414708099;
echo $timestamp;
$date = date_make_date($timestamp, 'UTC', 'datestamp');
date_timezone_set($date, timezone_open('America/New_York'));
$timestamp = $date->format('U');
echo '<br>';
echo $timestamp;

这应该将初始时间戳的时区从UTC转换为纽约。

但这最终会打印出来

1414708099<br>1414708099

因此时区没有改变...

我做错了什么?

顺便说一句,它还使用 Drupal 6 date_api.module:http://drupalcontrib.org/api/drupal/contributions!date!date_api.module/function/date_make_date/6

【问题讨论】:

  • 时间戳始终为 UTC。您不能将时区应用于时间戳 - 将其时区视为 0。无论您做什么,它都保持为 0。您要求使用 U 格式化的日期 - 手动说明:Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)。您无法从 Unix Epoch for New York 获得秒数。这个数字对于世界上的任何地方都是一样的。现在,如果您使用Y-m-d H:i:s 格式化该日期,那么您将获得正确格式化的时间以及纽约的时区偏移量。长话短说——这里没有任何问题。这一切都按预期工作。
  • @N.B. - 请将其发布为答案,而不是评论。

标签: php date datetime timezone datetime-format


【解决方案1】:

根据 cmets

时间戳始终为 UTC。您不能将时区应用于时间戳 - 将其时区视为 0。无论您做什么,它都保持为 0。您要求使用 U 格式的日期 - 手册指出:

U:自 Unix 纪元以来的秒数(格林威治标准时间 1970 年 1 月 1 日 00:00:00)。

您无法从 Unix Epoch for New York 获得秒数。这个数字对于世界上的任何地方都是一样的。 现在,如果您使用$date-&gt;format('Y-m-d H:i:s') 格式化该日期,那么您将获得正确格式化的时间以及纽约的时区偏移量。

长话短说 - 这里没有任何问题。这一切都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    • 2013-12-17
    • 2013-09-12
    • 2012-08-28
    相关资源
    最近更新 更多