【问题标题】:How can I add several months to a date coming from a date form field?如何将几个月添加到来自日期表单字段的日期?
【发布时间】:2014-01-12 10:26:09
【问题描述】:

使用 DateJS,您可以添加例如距当前日期六个月,如下所示:

Date.today().addMonths(6);

但是,我需要添加 24 个月,而不是今天的日期,而是用户在日期字段中键入的日期。所以today() 原则上应该替换为this.getField('begin_date').value 之类的东西。

将结果写入另一个数据表单域。

我很努力,但没有成功。谁能帮帮我?

【问题讨论】:

    标签: date field add datejs


    【解决方案1】:

    如果输入值是日期的文本表示,则首先需要将其转换为Date 对象。然后你可以随心所欲地使用它。

    DateJS 有一个非常聪明的 parse() 函数,它可以做到这一点,所以你可以这样实现它:

    Date.parse(this.getField('begin_date').value).addMonths(24)
    

    当需要特定的日期格式时,如欧洲常用的DD.MM.YYYY,可以使用parseExact()并指定格式。像这样:

    Date.parseExact(dateToParse, 'dd.MM.yyyy')  // leading zeroes required; parses 01.04.2014 but not 1.4.2014
    Date.parseExact(dateToParse, 'd.M.yyyy')  // leading zeroes not required; parses both 01.04.2014 and 1.4.2014
    

    【讨论】:

    • 谢谢!原则上,它工作得很好,但是 parse() 函数混淆了我的日子和月份。我的日期字段的格式类似于“dd.mm.yyyy”,因此 01.04.2014 表示“2014 年 4 月 1 日”。然而, parse() 函数将“2014 年 1 月 4 日”排除在外。我有机会改正吗?
    • 我试过了:var begin = this.getField('begin_date').value; end = Date.parseExact(begin, 'dd.MM.yyyy'); 但结果是“null”。只有当我输入例如:end = Date.parseExact('01.02.2015', 'dd.MM.yyyy'); 时,我才会得到想要的结果。为了让 Date.parse() 正确安排我的日期和月份,我还能做些什么?
    • 您确定begin 的值实际上有效日期吗?
    • 至少,看起来是这样; app.alert 向我显示例如 1.10.2005 作为 begin 的值(无小时、分钟、秒等),表示 2015 年 10 月 1 日。但 end 的值仍显示为 null。有没有其他方法?实际问题似乎是Date.parse() 假定month 位于date 之前。我是否可能必须从字段的 begin_date 中创建自己的 Date 对象?谢谢!
    • 好吧,我们现在有点偏离原来的问题了;但是,请再次查看我的更新。我建议彻底研究 DateJS 的文档。
    【解决方案2】:

    这是我为我的问题找到的解决方案,也使用 DateJS:

    start = this.getField('begin_date').value;
    var d1 = util.scand("dd.mm.yyyy", start);
    var myDate = new Date(d1);
    result = myDate.addMonths(24);
    

    这工作得很好,也跨越闰年,除了 2014/2018/2022 年 2 月 28 日 ... ;结果将是 2016/2020/2024 年 2 月 28 日...而不是 2016/2020/2024 年 2 月 29 日...在这些情况下,由用户决定接受 28 日或手动更改日期到 29 日。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 2017-01-08
      • 1970-01-01
      • 2013-01-28
      • 2010-10-08
      相关资源
      最近更新 更多