我写了一些JS试图想出用户选择的月份的最后一个日期,我试图弄清楚为什么它会提出不存在的日期,例如2015年6月31日,问题可能在于我如何计算月末,但我不能在这里看到正确的结论。这是一个有趣的错误,所以我想我会看看你们是否有解决方案。
var ealiest_effective_date = new Date(Date.parse("#{ruby_earliest_time_which_is_confirmed_correct.try(:strftime, "%m/%d/%Y")}"));
var minimumtime = Date.parse(new Date(ealiest_effective_date.getFullYear(), ealiest_effective_date.getMonth() + 2, 0));
$('.selected-date').change(function (e) {
date = Date.parse($(this).val());
user_selected_date = new Date(date);
console.log(user_selected_date.getMonth()+'/'+user_selected_date.getDate()+'/'+user_selected_date.getFullYear());
var possibleResultantEndOfMonth = Date.parse(new Date(user_selected_date.getFullYear(), user_selected_date.getMonth() + 2, 0));
var terminationEndOfMonth = new Date(Math.max(possibleResultantEndOfMonth,minimumtime));
var end_of_month_date = terminationEndOfMonth.getMonth()+'/'+terminationEndOfMonth.getDate()+'/'+terminationEndOfMonth.getFullYear();
$('#should_be_end_of_month').val(effective_date);
});
答案 0 :(得分:2)
.getMonth()
JavaScript方法将月份返回为基于零的值。例如。 1月是0,12月是11.在你的例子中,2015年6月31日应该是7月31日,而不是6月
另外我会小心使用以下代码
date = Date.parse($(this).val());
对于具有不同区域设置的人,它可能不起作用。
答案 1 :(得分:1)
我不知道你的逻辑或计算但是在使用JavaScript中的日期时我强烈建议使用Moment.js,这允许以简单的方式进行日期操作,并且还允许处理时区。看一看,我认为它可以帮助你。
d = moment("20150231", "YYYYMMDD")
d.isValid()
false
moment("20150228", "YYYYMMDD").isValid()
true
答案 2 :(得分:1)
除非您之前声明过,否则您的变量是:
var ealiest_effective_time
但你引用了:
ealiest_effective_date