getHours() 时间格式为 2016-04-29T19:00:00
getHours() with time format 2016-04-29T19:00:00
我从对 EventBrite API 的 AJAX 调用中收到一个时间字符串,如下所示: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
如有任何帮助,我们将不胜感激。
问题很可能源于时区偏移。我假设你在太平洋时区,猜测形成 -7h 差异。它试图在您调用 getHours()
时为您提供转换后的 UTC 时间戳,因为时间戳不提供任何时区偏移信息。
相反,您可以调用 getUTCHours()
,这将为您提供没有时区偏移的小时数。
var d = new Date('2016-04-29T19:00:00');
d.getHours(); // 12
d.getUTCHours(); // 19
或者,您可以在日期字符串中包含时区偏移量,如果您希望进行一些自动本地化,这可能是更好的选择。
例如
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
,尽管如果您在与事件不在同一时区的 server/client 上使用它,这可能会导致一些令人惊讶的结果。 (例如,基于 UTC-07:00
的服务器 returns 时间,客户端收到该日期,并添加其本地时区偏移量 UTC-04:00
。这实际上可以通过调用 setMinutes()
来完成,并添加当前分钟数和时区偏移量,因为 JavaScript 的日期解析可以处理溢出的日期(将分钟数设置为 300 会根据需要自动汇总小时数)。
例如
var d = new Date('2016-04-29T19:00:00');
d.setMinutes(d.getMinutes() + d.getTimezoneOffset());
d.getHours(); // 19
d.getUTCHours(); // 2
我从对 EventBrite API 的 AJAX 调用中收到一个时间字符串,如下所示: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
如有任何帮助,我们将不胜感激。
问题很可能源于时区偏移。我假设你在太平洋时区,猜测形成 -7h 差异。它试图在您调用 getHours()
时为您提供转换后的 UTC 时间戳,因为时间戳不提供任何时区偏移信息。
相反,您可以调用 getUTCHours()
,这将为您提供没有时区偏移的小时数。
var d = new Date('2016-04-29T19:00:00');
d.getHours(); // 12
d.getUTCHours(); // 19
或者,您可以在日期字符串中包含时区偏移量,如果您希望进行一些自动本地化,这可能是更好的选择。
例如
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
,尽管如果您在与事件不在同一时区的 server/client 上使用它,这可能会导致一些令人惊讶的结果。 (例如,基于 UTC-07:00
的服务器 returns 时间,客户端收到该日期,并添加其本地时区偏移量 UTC-04:00
。这实际上可以通过调用 setMinutes()
来完成,并添加当前分钟数和时区偏移量,因为 JavaScript 的日期解析可以处理溢出的日期(将分钟数设置为 300 会根据需要自动汇总小时数)。
例如
var d = new Date('2016-04-29T19:00:00');
d.setMinutes(d.getMinutes() + d.getTimezoneOffset());
d.getHours(); // 19
d.getUTCHours(); // 2