在数据库中,我有一行日期&时间,说2014-04-16 00:00:00
然后我使用
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之间有什么区别吗?
答案 0 :(得分:2)
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;
希望这能帮助任何与我有同样问题的人。