2007年,我们改用夏令时的日子发生了变化.在此更改之前属于DST扩展范围内的任何日期都会在Chrome和Firefox中报告错误的时区偏移.这就像Firefox和Chrome没有注意到DST曾经有过不同日子的事实.
如果您运行以下脚本,它将报告240分钟的偏移量.这是不正确的,它应该报告300分钟.IE10正确地做到了这一点.有谁知道修复?
alert(new Date('11/04/2004').getTimezoneOffset());
Run Code Online (Sandbox Code Playgroud)
更新:
这是我刚刚攻击的一段有趣的代码(见下文).令人惊讶的是,除了IE,每个浏览器的大多数日期都有多远.将开始日期和结束日期与此进行比较:http://www.timeanddate.com/worldclock/timezone.html?n = 77&syear = 2000
我最后用我自己的getTimezoneOffset替换了Date的原型,它根据硬编码表计算它.这对我们有用,因为我们只在美国做生意.这是我能想象到的最糟糕的解决方案......
<!DOCTYPE html>
<html>
<head>
<title>Moment Test</title>
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.0.0/moment.min.js"></script>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script>
var lastOffset = null;
var $tbody = null;
var endDate = new Date('01/01/2021');
function addDate(d) {
if($tbody === null)
$tbody = $('#dates');
var offset = d.getTimezoneOffset();
var s = '';
if(lastOffset != offset) {
if(lastOffset != null)
s = '<tr style="background-color: red;">';
lastOffset = offset;
}
else {
s = '<tr>';
}
var m = …Run Code Online (Sandbox Code Playgroud) 我的单页javascript应用程序通过REST调用以JSON格式检索数据.使用标准ISO8601格式的UTC时区格式化日期,例如2011-02-04T19:31:09Z.
注册该服务时,用户从下拉列表中选择他们的时区.此时区可能与用户浏览器的时区不同.javascript应用程序始终知道用户选择的时区是什么.
我知道如何将UTC字符串转换为日期.我知道Javascript只代表当地时区的日期.
但是我遇到了麻烦,想知道如何显示为时区而不是用户的本地时区格式化的日期.它必须在所有日期考虑DST.在内部,我希望将所有日期作为UTC处理,并且仅在显示时转换为另一时区中日期的字符串表示.我需要在用户个人资料中选择的时区中显示日期,而不是浏览器的时区.
我已经尝试过服务器发送用户浏览器时区和用户配置文件时区之间的时区偏移差异(以毫秒为单位).但我发现我不能只发送一个偏移值,但需要为每个日期发送一个偏移量来解释夏令时的变化.
有关如何显示各种时区格式的日期的任何建议或示例代码?到目前为止我找到的选项:
有没有更简单或更好的解决方案?