Javascript:`new Date(dateString)`vs`new Date(year,month,day)`之间的区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Javascript:`new Date(dateString)`vs`new Date(year,month,day)`之间的区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2322字,纯文字阅读大概需要4分钟。
内容图文
参考这个问题How do I get the number of days between two dates in JavaScript?上接受的答案.我在函数parseDate中看到:
function parseDate(str) {
var mdy = str.split('/')
return new Date(mdy[2], mdy[0]-1, mdy[1]);
}
他这样做:
var mdy = str.split('/')
return new Date(mdy[2], mdy[0]-1, mdy[1]);
即将传递的日期分为月,日和年,然后将其传递到日期,如新日期(年,月,日),而他可以简单地执行新的日期(str),它将返回相同的结果(不会它?).任何人都可以解释两种方式之间的区别吗?
更新:测试结果:
var str = '1/1/2000'
var mdy = str.split('/')
console.log( new Date(str) ) // Sat Jan 01 2000 00:00:00 GMT+0500 (Pakistan Standard Time)
console.log( new Date(mdy[2], mdy[0]-1, mdy[1]) ); // Sat Jan 01 2000 00:00:00 GMT+0500 (Pakistan Standard Time)
解决方法:
不,它们不一样(即使假设你将在一个月后减去:他正在做mdy [0] – 1)因为需要新的Date(str)(按标准,见§15.9.4.2)才接受日期在特定格式ISO 8601(YYYY-MM-DDTHH:mm:ss.sssZ,另见this post,我在此不再重复):
If the String does not conform to that format [ISO 8601] the function may fall back to any implementation-specific heuristics or implementation-specific date formats.
请注意(正如Royi在comments所指出的那样)也应该支持RFC 2822(根据MDN)但是在JavaScript specifications中没有提到它并且Internet Explorer没有正式支持它(参见MSDN,它可以解析类似的东西,但它不是相同).
在该代码中,他们使用特定的区域设置规则进行解析(MM / DD / YYYY,我认为是en-US区域设置,但它不仅仅是一个).说实话,我甚至不会使用该代码进行解析(因为是的,实际上它会因不同的语言环境而被破坏:甚至用于拆分的分隔符也不是“语言环境安全”).让我用一个例子来解释一下:
>您使用的是正确配置的日期时间选择器(或支持时为< input type =“date”/>)您将根据您的区域设置输入日期.例如在意大利(但一般在欧洲)我们写DD / MM / YYYY.
>现在让我们假设用户选择2014年12月21日(格式为21/12/2014,根据他的语言环境).
>使用字符串拆分代码将失败(因为它将选择21作为月份编号,显然它无效).更糟糕的是,这样的错误甚至可能不被注意(例如,如果用户选择1/2/2014代码将“认为”它是1月2日但用户选择2月1日).你想让它变得更复杂吗?甚至新的Date(str)也可能失败,因为它依赖于浏览器(并且你不能真正相信启发式是可移植的和安全的).
如果你问自己“那为什么他们使用这样的代码?”我会说他们使用快速解决方法来支持使用en-US语言环境的日期(可能是因为他们使用的浏览器不支持启发式猜测),但这不是你应该重用的东西.
解?不要手工解析日期(除非你真的非常清楚你正在做什么),使用一个好的库(例如moment.js),因为大多数关于日期格式化的假设都是错误的.
内容总结
以上是互联网集市为您收集整理的Javascript:`new Date(dateString)`vs`new Date(year,month,day)`之间的区别全部内容,希望文章能够帮你解决Javascript:`new Date(dateString)`vs`new Date(year,month,day)`之间的区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。