getHours()时间格式2016-04-29T19:00:00

时间:2016-04-21 00:10:13

标签: javascript datetime datetime-format

我收到了从AJAX调用到EventBrite API的时间字符串,如下所示:2016-04-29T19:00:00

我有一个JS函数可以解析月,日和年,但getHours()方法正在返回12:00:00(来自上面的日期字符串)。 代码:

eventStart = data.events[i].start.local; //looping through events array returned by api
startTime = new Date(eventStart);
eventMonth = month[startTime.getMonth()]; // works
eventDay = startTime.getDate();          //works
eventHour = startTime.getHours();        //returns 12:00:00

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

问题很可能源于时区偏移。我假设你在太平洋时区,猜测形成了-7h的差异。当您调用getHours()时,它会尝试为您提供转换后的UTC时间戳,因为时间戳不提供任何时区偏移信息。

相反,您可以拨打getUTCHours(),这会为您提供没有时区偏移的小时数。

var d = new Date('2016-04-29T19:00:00');
d.getHours(); // 12
d.getUTCHours(); // 19

或者,您可以在日期字符串中包含时区偏移量,如果您想允许某些自动本地化,这可能是更好的选择。

E.g。

var ds = '2016-04-29T19:00:00';
var d = new Date(ds + '-07:00');
d.getHours(); // 19
d.getUTCHours(); // 2, since UTC is 7 hours ahead, the full date would be 2016-04-30T02:00:00Z

或者更可靠,使用getTimezoneOffset,但如果您在与事件不在同一时区的服务器/客户端上使用此功能,则可能会导致一些令人惊讶的结果。 (例如,服务器根据UTC-07:00返回时间,客户端收到该日期,并添加其UTC-04:00的本地时区偏移量。这实际上可以通过调用setMinutes()并添加当前值来完成分钟和时区偏移,因为JavaScript的日期解析可以处理溢出日期(将分钟设置为300会根据需要自动累计小时数。)

E.g。

var d = new Date('2016-04-29T19:00:00');
d.setMinutes(d.getMinutes() + d.getTimezoneOffset());
d.getHours(); // 19
d.getUTCHours(); // 2