如果这是Javascript的Date.parse方法的真实文档和/或实现错误,我们正在寻求确认.
我所指的文档位于https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse,他们说'如果您没有指定时区,则假定为本地时区. "
但是下面的代码显示,尽管没有指定时区,但是如果传递给Date.parse的字符串以4位数年份表示开头,则不会假定本地时间(而是应用我的时区偏移量),并且破折号分隔.
var euroStyleDate = '2011-10-04';
var amerStyleDate = '10/04/2011';
var euroStyleParsed = Date.parse(euroStyleDate);
var amerStyleParsed = Date.parse(amerStyleDate);
console.log(euroStyleParsed); //1317686400000
console.log(amerStyleParsed); //1317700800000
console.log(new Date(euroStyleParsed));
//Date {Mon Oct 03 2011 20:00:00 GMT-0400 (Eastern Daylight Time)}
console.log(new Date(amerStyleParsed));
//Date {Tue Oct 04 2011 00:00:00 GMT-0400 (Eastern Daylight Time)}
Run Code Online (Sandbox Code Playgroud)
甚至可能还有其他情况,如果我不对,我肯定我不是第一个发现这个的人.因此,如果有人知道相关链接,我肯定希望能够更深入地了解这一点.
我在FF3,Chrome for Windows中遇到这种情况,当然只是为了特别IE8甚至似乎无法在2011-10-04执行转换:我只是在我的应用程序中获取一个空字符串
提前感谢任何进一步的见解或资源.
Nar*_*pas 14
我也遇到了这个概念.对于像我一样谷歌搜索"Javascript日期破折号"的人,这是我能想到的最明显的示范,这里发生了什么.
简而言之,斜线表示本地时区,短划线表示UTC.其他答案有关于原因的解释.
<script type="text/javascript">
var
testB = new Date("2012/02/09"),
testC = new Date("2012-02-09");
alert(testB.toString());
alert(testC.toString());
alert(testC.toUTCString());
</script>
Run Code Online (Sandbox Code Playgroud)
*更新:*看起来这里有几种不同的标准:
EMCAScript <5标准允许标准IETF格式的日期,例如Sun Oct 03 2010.使用这些日期,假定为当地时区.
在ECMAScript 5中,也允许使用ISO 8601标准的限制版本,例如2010-10-03.该规范似乎说(可能遵循ISO 8601?),在这种情况下,如果未指定UTC时区,则假定为UTC时区.
我没有找到Date.parse可以处理mm/dd/yyyy日期的规范,但我的浏览器(Chrome 14)显然可以,也可能是其他浏览器.假设当地时区,这似乎遵循上面的标准1.但是,鉴于它不在规范中,我建议不要使用这个版本,因为它可能依赖于浏览器(10-03-2010如果我在浏览器上设置了欧洲语言环境,我不知道是否会导致不同的日期) .
Date.parse在大多数解释器中,本机函数存在一些问题- 我经常遇到像您描述的那样的时区问题.所以一般来说,我要么使用像Datejs这样的库,要么我自己编写解析函数.SIMILE AJAX库的DateTime模块有一个很好的示例函数,用于解析ISO- 8601日期(你所指的是什么euroStyleDate,加上一个可选的时间组件).
设置日期时,我通常使用new Date()然后使用这些setUTC*()函数将不同的日期元素设置为我想要的精度.它并不完美,但至少你处理的是一个明确的时区.
| 归档时间: |
|
| 查看次数: |
3166 次 |
| 最近记录: |