【问题标题】:Adding the offset / local time to a UTC date / string using Javascript使用Javascript将偏移量/本地时间添加到UTC日期/字符串
【发布时间】:2017-09-25 07:50:44
【问题描述】:

我需要将本地偏移量(时区)添加/删除到我从 Rest API 获得的 UTC 字符串。所以,比如说我从我的服务器收到以下内容,2040-09-23T22:00:00.000Z 我希望添加或删除我在单独的函数中使用return new Date().getTimezoneOffset(); 确定的本地 UTC 偏移量。

所以要添加/删除本地时区,我会这样做,注意我的主函数,然后是辅助函数以及我如何尝试确定本地时间

function makeLocalTime(utcFromServer) {
   return new Date(utcFromServer + (getOffSet() * 60 * 1000));
}

function getOffSet() {
    return new Date().getTimezoneOffset();
}

var localTimeUTCwithOffset = makeLocalTime('2040-09-23T22:00:00.000Z');

但是,这会返回错误消息无效日期。有什么想法我哪里出错了吗?

【问题讨论】:

  • 你传入的是日期字符串,试试return new Date(new Date(utcFromServer) + (getOffSet() * 60 * 1000))
  • 这也会返回一个无效的日期
  • 试试return new Date(new Date(utcFromServer).getTime() + (getOffSet() * 60 * 1000))
  • @MarkSandman 对,它隐式使用日期的toString 方法。 @Titus 的建议应该可行。
  • 我不确定您要达到什么目的,请注意浏览器会在使用 new Date(utcFromServer) 时将字符串转换为用户的正确时间,所以如果您从服务器是 22:00 UTC,对于用户来说是 17:00,浏览器会将其显示为 17:00。例如:new Date('2040-09-23T22:00:00.000Z') 为我返回 Mon Sep 24 2040 00:00:00 GMT+0200 (IST)。

标签: javascript date datetime


【解决方案1】:

您似乎将字符串视为日期。您需要将字符串解析为 Date 然后进行调整:

var s = '2040-09-23T22:00:00.000Z';
var d = new Date(s);

带有偏移量的 ISO 8601 扩展格式字符串将被大多数(但不是所有)正在使用的浏览器正确解析,例如:

var s = '2040-09-23T22:00:00.000Z';
console.log(s + '\n' + new Date(s).toISOString());

如果您尝试根据特定偏移量确定时间,您可以调整 UTC 时间值,然后使用 UTC 方法格式化您自己的日期字符串。如果这就是您想要做的,那么这可能是 Creating a Date object in a specific time zoneHow to initialize javascript date to a particular timezone() 的副本。

【讨论】:

    猜你喜欢
    • 2017-08-01
    • 2012-03-22
    • 2014-02-22
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2014-02-04
    • 2018-09-27
    相关资源
    最近更新 更多