问题在于:我有一个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);
那么,我怎么在这之前得到飞蛾?我尝试使用getMonth
和setMonth
,但无法使其正常工作。
答案 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) })
然后,您只需从输入中读取该值,并将控件设置为清除后的控件。