【发布时间】:2014-01-12 10:26:09
【问题描述】:
使用 DateJS,您可以添加例如距当前日期六个月,如下所示:
Date.today().addMonths(6);
但是,我需要添加 24 个月,而不是今天的日期,而是用户在日期字段中键入的日期。所以today() 原则上应该替换为this.getField('begin_date').value 之类的东西。
将结果写入另一个数据表单域。
我很努力,但没有成功。谁能帮帮我?
【问题讨论】:
使用 DateJS,您可以添加例如距当前日期六个月,如下所示:
Date.today().addMonths(6);
但是,我需要添加 24 个月,而不是今天的日期,而是用户在日期字段中键入的日期。所以today() 原则上应该替换为this.getField('begin_date').value 之类的东西。
将结果写入另一个数据表单域。
我很努力,但没有成功。谁能帮帮我?
【问题讨论】:
如果输入值是日期的文本表示,则首先需要将其转换为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
【讨论】:
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 的值实际上是有效日期吗?
1.10.2005 作为 begin 的值(无小时、分钟、秒等),表示 2015 年 10 月 1 日。但 end 的值仍显示为 null。有没有其他方法?实际问题似乎是Date.parse() 假定month 位于date 之前。我是否可能必须从字段的 begin_date 中创建自己的 Date 对象?谢谢!
这是我为我的问题找到的解决方案,也使用 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 日。
【讨论】: