Javascript 设置日期时,Moment会自动更正无效日期
Im通过捕捉输入中的日、月和年,使用矩库设置日期: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({ '
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。我需要一些澄清。您是在尝试根据日期比较两个时刻,还是在尝试验证输入是否溢出?两者都有可能,我只是需要知道更多来回答你的问题。我正在尝试两者兼而有之^^