以用户区域设置格式显示日期/时间和时间偏移
我希望服务器始终以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); }