在 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);

那么,我怎样才能用这个得到飞蛾呢?我尝试使用getMonthsetMonth,但无法成功。

【问题讨论】:

您基本上必须在 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中使用数据库日期

使用 mysql 在 datepicker 中禁用天数

如何使用 Formik 在 react-datepicker 中设置初始日期?

日期选择器:jquery datepicker的使用

bootstrap-datepicker 手动输入日期问题