转换时区会产生相同的时间戳
Converting time zones yields same timestamp
我在PHP中有一个DateTime对象。 在这里:
$base = new DateTime('2013-10-21 09:00', new DateTimeZone('America/New_York'));
当我打电话给$base->getTimestamp()
时,正如预期的那样,我得到:1382360400
。
在我的项目中,我正在使用 moment.js,当我告诉 moment 这个时间戳是"本地时间"时,它工作正常:
// Correct :)
moment.unix(1382360400).local().format('LLLL') // Monday, October 21 2013 9:00 AM
问题是,我的应用程序中的所有其他日期都是UTC格式(除了这个),所以在我的JavaScript代码中,我有这个:
var theDate = moment.unix(timestamp).utc();
对于所有其他日期,这有效,但不适用于此日期。 1382360400
是"本地时间",而不是 UTC。 我想打电话给setTimezone
可以解决这个问题,所以我做了$base->setTimezone(new DateTimeZone('UTC'));
.
打电话给我var_dump($base)
:
object(DateTime)#1 (3) {
["date"]=>
string(19) "2013-10-21 13:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
这看起来是正确的,但是当我做$base->getTimestamp()
时,我又1382360400
了! 不对! 我显然没有得到正确的日期。
// Incorrect :(
moment.unix(1382360400).utc().format('LLLL') // Monday, October 21 2013 1:00 PM
如何让 PHP 的DateTime
以 UTC 格式返回时间戳? 我希望从$base->getTimestamp()
那里得到1382346000
,这就是我这样做时得到的:
$UTC = new DateTime('2013-10-21 09:00', new DateTimeZone('UTC'));
echo $UTC->getTimestamp();
那么,如何将我的DateTime
对象转换为 UTC 并获得我想要的时间戳?
// Correct :)
moment.unix(1382346000).utc().format('LLLL') // Monday, October 21 2013 9:00 AM
(PHP 演示:https://eval.in/56348)
时间戳没有时区。DateTime对象显然在内部存储时间戳,而不是日期和时间。因此,当您更改时区时,相同的时间戳仍然存在,但您的日期和时间发生了变化。开始时是 9 小时,更改时区后是 13 小时。
相关文章:
- 如何在时间标签和相同的类中以UTC格式重新格式化ISO 8601时间戳,并通过JavaScript根据用户区域设置和时区
- 时刻.js时区值返回错误的时间戳
- 使用 JavaScript 的客户端日期/时间戳一致(考虑时区)
- 如何将 unix 时间戳转换为 JavaScript 日期对象(考虑时区)
- 如何使用 javascript 在没有时区列的 Postgis 时间戳中插入当前时间戳
- 如何使用客户端时区将数据库时间戳输出为客户端中的日期戳
- 转换时区会产生相同的时间戳
- 没有时区的PostgreSQL字段时间戳 - 如何检查它是否等于今天
- 如何将“字符串”转换为“没有时区的时间戳”
- 从特定时区获取当前时间戳
- 获取UTC时区's在javascript中的时间戳
- 将时间戳转换为日期会在结果中显示不同的时区
- 用javascript将unix日期时间戳转换为特定时区的时间
- 获取特定时区中最后12点的时间戳
- 为什么我的时刻.js不计算时间在不同的时区基于给定的时间戳
- 我应该如何在服务器端存储来自JS的时间戳,以便我可以可靠地使用它转换为其他时区?
- javascript获取系统时区的时间戳,而不是UTC
- 时间戳日期时区问题在dojo
- 列的类型是时间戳,不带时区,但表达式的类型是整数
- 将postgres时间戳(+时区)转换为Date对象[Javascript]