这个函数有些奇怪,我无法弄清楚是什么原因造成的。用户可以从下拉列表中选择天数。
日期是:[3, 7, 14, 21, 28, 30, 60, 90, 180, 365]
因此,当用户选择 3
时,moment.js 会将其转换为适当的 ISO 日期。但是,如果用户选择 7、14 或 21,它会生成“无效日期”,但它适用于其他所有内容。怎么回事?
vm.getSelectedDate = function (days) {
console.log(days);
if (vm.selectedReminderDay) {
vm.selectedReminderDate = new Date(vm.today);
console.log(vm.selectedReminderDate);
vm.selectedReminderDate.setDate(vm.today.getDate() + days);
console.log(vm.selectedReminderDate);
var m = moment(vm.selectedReminderDate, "MM/DD/YYYY h:mm:ss A");
console.log(m);
vm.utcReminderDate = m.toISOString();
console.log(vm.utcReminderDate);
return "in " + vm.selectedReminderDay + " days";
}
else {
return "When?"
}
}
最佳答案
Date.getDate()
获取当月的当前日期,当它超出范围时(通常超过 ~30 时)会导致意外行为。您可以使用的是 Date.getTime()
:
vm.selectedReminderDate.setTime(vm.today.getTime() + (days*24*60*60*1000));
乘法只是将天数转换为 setTime
期望的毫秒数。
但是更好的方法是单独使用 momentjs 来操纵日期,如下所示:
vm.getSelectedDate = function (days) {
if (vm.selectedReminderDay) {
var newdate = moment(vm.today).add(days, 'days');
vm.utcReminderDate = newdate.toISOString();
return "in " + vm.selectedReminderDay + " days";
}
else return "When?";
}
关于javascript - 为什么 moment.js 只为某些日期生成无效日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37735736/