以用户区域设置格式显示日期/时间和时间偏移

时间:2020-03-05 18:59:20  来源:igfitidea点击:

我希望服务器始终以HTML中的UTC形式提供日期,并让客户端站点上的JavaScript将其转换为用户的本地时区。

如果我可以以用户的区域设置日期格式输出,则为奖励。

解决方案

回答

不知道如何进行语言环境,但是javascript是一种客户端技术。

usersLocalTime = new Date();

将在其中包含客户的时间和日期(由他们的浏览器报告,并且通过扩展,他们正坐在他们的计算机上报告)。将服务器的时间包括在响应中,并做一些简单的数学运算来猜测最终的偏移量应该是微不足道的。

回答

我们可以使用以下命令,以分钟为单位报告与格林尼治标准时间的时区偏移量:

new Date().getTimezoneOffset();

笔记 :
该函数返回一个负数。

回答

我们可以使用new Date()。getTimezoneOffset()/ 60作为时区。还有一个" toLocaleString()"方法,用于使用用户的语言环境显示日期。

这是整个列表:处理日期

回答

getTimeZoneOffset()和toLocaleString对于基本日期工作很有用,但是如果需要实时时区支持,请查看mde的TimeZone.js。

这个问题的答案中还有其他一些选择

回答

这是我在过去的项目中使用的:

var myDate = new Date();
var tzo = (myDate.getTimezoneOffset()/60)*(-1);
//get server date value here, the parseInvariant is from MS Ajax, you would need to do something similar on your own
myDate = new Date.parseInvariant('<%=DataCurrentDate%>', 'yyyyMMdd hh:mm:ss');
myDate.setHours(myDate.getHours() + tzo);
//here you would have to get a handle to your span / div to set.  again, I'm using MS Ajax's $get
var dateSpn = $get('dataDate');
dateSpn.innerHTML = myDate.localeFormat('F');

回答

.getTimezoneOffset()方法以分钟为单位报告时区偏移量,从GMT / UTC时区开始向西计数,从而导致偏移量值与通常所用的值相反。 (例如,纽约时间将报告为+240分钟或者+4小时)

要获得以小时为单位的正常时区偏移量,我们需要使用:

var timeOffsetInHours = -(new Date()).getTimezoneOffset()/60

重要细节:
请注意,夏时制是计算结果的因素,因此此方法为我们提供的实际上是时间偏移,而不是实际的地理时区偏移。

回答

以UTC日期开头的最简单的方法似乎是创建一个新的Date对象,并使用setUTC方法将其设置为所需的日期/时间。

然后,各种toLocaleString方法将提供本地化的输出。

例子:

// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);

console.log(d);                        // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString());       // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString());   // -> 02/28/2004
console.log(d.toLocaleTimeString());   // -> 23:45:26

一些参考:

  • toLocaleString
  • toLocaleDateString
  • toLocaleTimeString
  • getTimezoneOffset

回答

构造日期对象后,下面是转换的代码段:

该函数采用UTC格式的Date对象和格式字符串。
我们将需要一个Date.strftime原型。

function UTCToLocalTimeString(d, format) {
    if (timeOffsetInHours == null) {
        timeOffsetInHours = (new Date().getTimezoneOffset()/60) * (-1);
    }
    d.setHours(d.getHours() + timeOffsetInHours);

    return d.strftime(format);
}