【发布时间】:2014-09-16 09:21:47
【问题描述】:
参考此问题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]);
即将传递的日期拆分为月、日和年,然后将其传递给Date,例如new Date(year, month, day),而他可以简单地执行new Date(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)需要(按照标准)只接受日期特定格式(年/月/日,另请参见 this post),并且他们正在使用特定的语言环境规则进行解析(月/日/年)。老实说,我什至不会使用该代码进行解析(因为是的,实际上它会因不同的语言环境而被破坏)。 -
根据您的更新:您使用的是 200 年 1 月 1 日,那么您不会看到差异,但浏览器必须仅接受(对于解析的日期)它在转换为字符串时产生的内容,并且它们 yyyy /mm/dd 格式。尝试 2014 年 1 月 1 日...这取决于语言环境(那么对于月份首先出现的语言环境,它将失败)。
-
@LearningNeverStops 是的,因为您的语言环境与他们通过手动解析所做的相匹配。例如,它会在我的语言环境(意大利语/意大利)中失败,因为我们写的是日/月/年(例如,“2014 年 12 月 21 日”是“21/12/2014”,但他们的解析例程需要“12/21 /2014" 并且转换显然会失败)。通常我总是强烈建议不要在 JavaScript 中手动进行日期解析,这是一个复杂的话题,并且有一些非常不错的库。
标签: javascript date