在 DatePicker 中获取上个月
Posted
技术标签:
【中文标题】在 DatePicker 中获取上个月【英文标题】:Get last month in DatePicker 【发布时间】:2017-12-26 08:17:08 【问题描述】:问题来了:我有一个 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
,但无法成功。
【问题讨论】:
您基本上必须在 javascript 中获取您想要的日期,请参阅:***.com/questions/26488043/… @DanDumitru 我看到了一个类似的答案,但我想我错过了一点。之前没有使用 getMonth,现在可以正常使用了 :) 谢谢。 【参考方案1】:C# 的 AddMonths
改变了 DateTime
的月份,这与 JavaScript 的 setMonth
所做的非常相似。然而,重要的是,AddMonths
考虑了边缘情况,例如需要向前/向后一年,或者当特定日期对该月无效时会发生什么。例如,如果您从 2017 年 3 月 29 日减去一个月,则 该年没有 2 月 29 日。因此,日期组件也需要更改为 28。但如果是闰年,也会有,所以你也必须考虑到这一点。
相比之下,JavaScript 的 setMonth
比较笨。它实际上只是修改月份,然后根据需要让日期溢出。例如,在前面的场景中,从 2017 年 3 月 29 日减去一个月,JavaScript 实际上会给你 2017 年 3 月 1 日,因为它去了 2 月 1 日,然后添加了 29 天的日期部分。由于 2 月只有 28 个,因此它会回到 3 月。至少考虑闰年是足够聪明的,所以在像 2016 年这样的年份,你实际上会在 2 月 29 日结束。
无论如何,JavaScript 日期都非常糟糕。如果你真的想和他们一起工作,我建议使用像 Moment.js 这样的库,它可以巧妙地处理这些类型的情况。
不过,您最好的解决方案可能是简单地保留 C# 中的默认值,因此您不必担心以后必须通过 JavaScript 计算它。例如,您可以添加 data-*
属性,例如:
.htmlAttributes(new data_default = DateTime.Now.AddMonths(-1) )
然后,您可以简单地从输入中读取此值,并在清除时将控件设置为该值。
【讨论】:
2 月的问题与我的情况无关,因为它是 3 月 1 日,这符合它的意图。我选择了@DanDumitru 链接的解决方案,因为我希望在函数中计算日期,以便在每次有人想要清除过滤器时使用,它会全部清除。以上是关于在 DatePicker 中获取上个月的主要内容,如果未能解决你的问题,请参考以下文章
在asp.net c#中的datepicker中使用数据库日期