Moment会在设置日期时自动更正无效日期
Moment automatically corrects invalid dates when setting one
我通过捕捉、日期、月份和年份从输入中设置日期和时刻库:
var userDate = moment().set({ 'year': oTextY.innerHTML, 'month': oTextMi.innerHTML - 1, 'day': oTextDi.innerHTML });
如果在输入中我指定2005年2月31日,它会给我2005年3月16日的
有人想阻止这种奇怪的行为吗?:)
这里发生了一些事情。首先,"day"是"day of week"的意思,而不是"date of month"。我想你在找"约会对象"。这不是直观的。
接下来,瞬间的二传手溢出进入下一个单元。在2005年,2月有28天,所以当你试图设置为2月31日时,设置操作将以额外的天数溢出到下个月,结果日期将是2005-03-03。
因此,您更正的代码将是:
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
如果你需要将这个时刻与另一个时刻进行比较,不管时间如何,只需将isSame()
与day一起使用即可:
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个。这与一周中某一天的时间溢出方式有关。这有点复杂,但在这里的文档中解释得相当好:http://momentjs.com/docs/#/get-台/天/
如果你想要一个更完整的解释,请随时回复,我会仔细阅读。我认为你需要知道的主要是你应该使用date
。
月份从0开始,您可以在设置日期时添加1:
var userDate = moment().set({ 'year': oTextY.innerHTML, 'month': oTextMi.innerHTML + 1, 'day': oTextDi.innerHTML });
相关文章:
- 如何修复FF和IE中的Javascript无效日期错误
- 下周末'javascript中的s datetime返回无效日期
- Momentjs :如何防止“无效日期”
- 用户可以在AngularUI日期选择器中键入无效的日期
- 如何在一个代码中检查无效的日期格式和超过18年的有效期
- Moment会在设置日期时自动更正无效日期
- 在jquery日期选择器中禁用特定日期无效
- Javascript第一次的日期无效
- 返回的日期无效
- Javascript Date 中的日期无效
- Firefox 中的日期无效,在 JavaScript 中将字符串转换为日期(mm-dd-yyyy)
- 新日期(isoDate)上的日期无效
- jQuery UI日期选择器getDate今天返回's的日期无效
- firefox中的日期无效
- 夏威夷时区的日期使JavaScript日期无效
- 字符串格式的日期无效
- 无法将字符串转换为日期-无效日期
- 法语的日期无效
- bootstrap日期选择器设置默认日期无效
- 如何在 JS 中使 00/00/0000 日期无效