【问题标题】:Convert local time to user preferred timezone and user preferred timezone to GMT将本地时间转换为用户首选时区,将用户首选时区转换为 GMT
【发布时间】:2021-12-12 14:45:44
【问题描述】:

在我的应用程序中,我使用时区选择作为用户偏好。在显示日期时,我将本地时间转换为用户首选时区。要转换我使用下面的方法

function convertSystemTimeToUserTimeZone(localDateTimeValue){
      var userTimeZoneOffset = 3; //For example purpose
      var newDate = new Date(localDateTimeValue.getTime() + (localDateTimeValue.getTimezoneOffset() * 60000) + (userTimeZoneOffset * 3600000));
      return newDate;
}

例如。我正在将本地时区(即 IST)转换为用户首选时区,即 EST

这工作正常并将用户本地系统时间转换为他的用户首选时区。 (注意:只有日期时间值发生变化,但时区仍显示本地系统时区)

现在在将此日期发送到后端时,我需要将其转换为 GMT。我不知道如何将此返回的日期转换为 GMT,因为当我计算 GMT 转换时,它考虑的是本地系统时区 (IST) 而不是用户首选时区设置 (EST)。

我尝试了以下方法,但没有运气。

console.log(new Date(userTimeZoneDateTimeValue.getUTCFullYear(), userTimeZoneDateTimeValue.getUTCMonth(), userTimeZoneDateTimeValue.getUTCDate(), userTimeZoneDateTimeValue.getUTCHours(), userTimeZoneDateTimeValue.getUTCMinutes(), userTimeZoneDateTimeValue.getUTCSeconds()));
console.log(userTimeZoneDateTimeValue.toUTCString());

【问题讨论】:

  • ECMAScript Date 对象本质上都是 UTC,时区和偏移量只对显示很重要。 date.toLocaleString('default', {timeZone:'America/New_York', timeZoneName:'long'}) 应该可以完成这项工作。

标签: javascript datetime timezone momentjs


【解决方案1】:

function getTimeZone( _add = 0 ) {
  var offset = new Date().getTimezoneOffset(), o = Math.abs(offset) + _add;
  return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}


var addOffset = 180; // 3 hours
console.log("With offset: ", getTimeZone(addOffset) );

console.log("Without offset: ", getTimeZone() );

【讨论】:

  • 纯代码答案没有帮助。一个好的答案应该解释为什么 OP 有问题以及您的代码如何修复它。
猜你喜欢
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2019-03-20
  • 2015-08-03
  • 2016-04-07
相关资源
最近更新 更多