上个月在DatePicker中获取

时间:2017-07-20 14:44:23

标签: asp.net-mvc kendo-datepicker

问题在于:我有一个Kendo.DatePicker,充当过滤器,它的默认值设置为此,在控件中

.Value(DateTime.Now.AddMonths(-1))

当我们点击“清除过滤器”按钮时,我希望日期返回默认值,该值始终为 CurrentDate - 1个月

我有这个,以获取当前日期(从this question获得)

var todayDate = kendo.toString(kendo.parseDate(new Date()), 'dd/MM/yyyy');
$("#initialDate").data("kendoDatePicker").value(todayDate);

那么,我怎么在这之前得到飞蛾?我尝试使用getMonthsetMonth,但无法使其正常工作。

1 个答案:

答案 0 :(得分:1)

C#' AddMonths改变DateTime与JavaScript setMonth大致相同的月份。但是,重要的是,AddMonths会考虑边缘情况,例如需要一年前进/后退,或者当特定日期对该月无效时会发生什么。例如,如果您从2017年3月29日减去一个月,则当年没有2月29日 。因此,日期组件需要更改为28.如果它是闰年,那么也会有,所以你也必须考虑到这一点。

相比之下,JavaScript setMonth相对愚蠢。它只是修改月份,然后根据需要让日期溢出。例如,对于从3月29日减去一个月的上一个场景,2017年JavaScript实际上会在2017年3月1日到达2月1日,然后添加29天的日期组件。由于二月只有28,它回到了三月。它至少足够聪明,可以考虑闰年,所以在2016年这样的一年中,你最终会在2月29日结束。

无论如何,JavaScript的日期非常糟糕。如果您真的想与他们合作,我建议使用像Moment.js这样的库,除其他外,它可以巧妙地处理这些类型的情况。

但是,您最好的解决方案可能只是保留C#中的默认值,因此您不必担心以后必须通过JavaScript进行计算。例如,您可以添加data-*属性,例如:

.HtmlAttributes(new { data_default = DateTime.Now.AddMonths(-1) })

然后,您只需从输入中读取该值,并将控件设置为清除后的控件。