来自php unix时间戳的javascript日期

时间:2015-02-23 06:38:26

标签: javascript php unix datetime

在数据库中,我有一行日期&时间,说2014-04-16 00:00:00然后我使用

将该日期时间转换为unix时间戳
strtotime('2014-04-16 00:00:00') * 1000; // result 1397577600000

在javascript中我试图使用以下代码获取小时

var d = new Date(1397577600000); // 1397577600000 from php unix timestamp in previous code
d.getHours(); // return 23
d.getMinutes(); // return 0

为什么getHours()返回23而不是0? js timestamp和php timestamp之间有什么区别吗?

3 个答案:

答案 0 :(得分:2)

javascript中的

Date个对象将始终根据浏览器的当前时区返回值。因此,如果d.getHours()为您返回23,则表示您的本地浏览器时区比UTC(-01:00)提前一小时。

您想要基于UTC时区的Date对象的小时数,您可以使用:

d.getUTCHours()

跟进:

只是抛出一些免费的建议,您可以使用以下代码来处理从一个上下文到另一个上下文的日期值:

PHP:
// Fetched from the db somehow
$datetime_db = '2014-04-16 00:00:00';

// Convert to PHP DateTime object:
$datetime_obj = new DateTime($datetime_db, new DateTimeZone('UTC'));

// Format DateTime object to javascript-friendly ISO-8601 format:
$datetime_iso = $datetime_obj->format(DateTime::W3C);
使用Javascript:
var d = new Date('2014-04-16T00:00:00+00:00'); // 2014-04-16T00:00:00+00:00 from PHP in previous code
d.getUTCHours(); // returns 0

当使用该语言处理时,这会将日期时间变量保持为特定于语言的对象格式,并将值序列化为所有当前浏览器/语言都接受的字符串格式(国际标准ISO-8601)。

答案 1 :(得分:0)

我在这里得到21,因为在Javascript中,用户的本地时区将被视为获取时间和日期。

答案 2 :(得分:0)

好的,根据Arun P Johnny的说法。

我更改strtotime参数以匹配我的时区,在这种情况下我将其更改为

strtotime('2014-04-16 00:00:00 GMT+7') * 1000;

希望这能帮助任何与我有同样问题的人。