Javascript getFullYear() Date方法的怪异行为
Javascript getFullYear() Date method weird behavior
谁能解释为什么getFullYear不返回2014?
console.log(new Date('2014-01-01').getFullYear()) //2013
console.log(new Date('2014-01-01').getUTCFullYear()) //2014
From MDN:
"March 7, 2014"的dateString返回与"2014-03-07"不同的日期,除非当地时区是UTC。当转换dateString为"March 7, 2014"时,假定为本地时区。当转换dateString "2014-03-07"时,假定UTC时区。这将产生两个不同的Date值,具体取决于要转换的字符串的格式。
所以当你要求它解析"2014-01-01"时,你得到的是UTC时间。
然后在对象上调用.getFullYear()
,它使用本地时间。如果你像我一样住在美国东部,那么它基本上是从内部时间减去4个小时,然后返回年。
结果如下:
- "2014-01-01"转换为"1388534400000"
- 调用
.getFullYear()
,将"1388534400000"转换为本地时间 - 本地时间类似于"1388534160000"
- 新的一年还没有出现在"1388534160000",所以它仍然是2013
所有这些都意味着如果我们做类似
的事情console.log(new Date('January 1, 2014').getUTCFullYear()); // 2014
console.log(new Date('January 1, 2014').getFullYear()); // 2014
我们将得到相同的年份,因为我们告诉浏览器在新年使用我们的时区,但它们是不相等的:
console.log(new Date('January 1, 2014').getUTCHours()); // 5
console.log(new Date('January 1, 2014').getHours()); // 0
据此:"不同之处在于,当你以YYYY-MM-DD格式指定一个字符串时,你得到的日期是GMT时区的12点,而当你以DD-MM-YYYY格式指定一个日期时,你得到的日期是当前时区的12点。"
所以基本上,因为你指定的是新闻年月日2014,当它从GMT转换到你的本地时间时,它认为它是12-31-13而不是01-01-14。
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- toLocaleDateString和toLocaleString方法不尊重机器时区
- 有条件更新d3.js力图中节点的最佳方法
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- Javascript getFullYear() Date方法的怪异行为