Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置日期时,Moment会自动更正无效日期_Javascript_Html_Date_Momentjs - Fatal编程技术网

Javascript 设置日期时,Moment会自动更正无效日期

Javascript 设置日期时,Moment会自动更正无效日期,javascript,html,date,momentjs,Javascript,Html,Date,Momentjs,Im通过捕捉输入中的日、月和年,使用矩库设置日期: var userDate = moment().set({ 'year': oTextY.innerHTML, 'month': oTextMi.innerHTML - 1, 'day': oTextDi.innerHTML }); 如果在输入中我指定了2005年2月31日,则为2005年3月16日 有人知道如何防止这种奇怪的行为吗?:) 月份从0开始,您可以在设置日期时添加1: var userDate = moment().set({ '

Im通过捕捉输入中的日、月和年,使用矩库设置日期:

var userDate = moment().set({ 'year': oTextY.innerHTML, 'month': oTextMi.innerHTML - 1, 'day': oTextDi.innerHTML });
如果在输入中我指定了2005年2月31日,则为2005年3月16日


有人知道如何防止这种奇怪的行为吗?:)

月份从0开始,您可以在设置日期时添加1:

var userDate = moment().set({ 'year': oTextY.innerHTML, 'month': oTextMi.innerHTML + 1, 'day': oTextDi.innerHTML });

你有两件事要做。首先,“天”是“星期几”的意思,而不是“月日”。我想你在找“约会”。这不是直观的

接下来,设置器在瞬间溢出进入下一个单元。在2005年,2月有28天,因此当您尝试设置为2月31日时,set操作将溢出到下一个月的额外天数,结果日期将为2005-03-03

因此,更正后的代码为:

var userDate = moment().set({ 'year': oTextY.innerHTML, 
'month': oTextMi.innerHTML - 1, 'date': oTextDi.innerHTML });
"2005-03-03T07:25:36-06:00"
您的预期输出为:

var userDate = moment().set({ 'year': oTextY.innerHTML, 
'month': oTextMi.innerHTML - 1, 'date': oTextDi.innerHTML });
"2005-03-03T07:25:36-06:00"
虽然偏移量当然是你的计算机本地的,而不是我的

听起来好像您正在尝试验证日期输入,然后将其与另一个日期进行比较。在这种情况下,可能最简单的方法就是将输入解析为字符串:

moment(oTextY.innerHTML + '-' + oTextMi.innerHTML + '-' + oTextDi.innerHTML,
'YYYY-MM-DD') 
您会注意到,如果您将此信息传递给您提供的输入,您将获得无效日期:

moment(2005 + '-' + 2+ '-' + 31,
'YYYY-MM-DD').isValid()
false
如果您需要将这一时刻与另一时刻进行比较,而不考虑时间,只需在day中使用
IsName()

var a = moment(oTextY.innerHTML + '-' + oTextMi.innerHTML + '-' + oTextDi.innerHTML,
'YYYY-MM-DD') 
a.isSame(moment(), 'day') //api uses day here because inconsistency is what programmers do
至于为什么你用
day
而不是
date
得到的是16号。这与“时刻溢出”的方式有关。这有点复杂,但在这里的文档中解释得相当清楚:


如果你想得到一个更完整的解释,请随时回复,我会详细解释的。我想你需要知道的主要是你应该使用
date

谢谢你的回答:)但是要将userDate与另一个日期进行比较,时间会有所不同,所以我不能使用date。我需要一些澄清。您是在尝试根据日期比较两个时刻,还是在尝试验证输入是否溢出?两者都有可能,我只是需要知道更多来回答你的问题。我正在尝试两者兼而有之^^