将本地时间转换为用户首选时区,将用户首选时区转换为 GMT
Posted
技术标签:
【中文标题】将本地时间转换为用户首选时区,将用户首选时区转换为 GMT【英文标题】:Convert local time to user preferred timezone and user preferred timezone to 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')
应该可以完成这项工作。
【参考方案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 有问题以及您的代码如何修复它。以上是关于将本地时间转换为用户首选时区,将用户首选时区转换为 GMT的主要内容,如果未能解决你的问题,请参考以下文章