mat*_*ttR 3 javascript pdf date
我从Acrobat PDF表单中的javascript获得了一个有趣的结果
我有一系列日期表单字段.第一个字段用于用户输入,其余字段由javascript计算,每个字段增加一天.
代码是:
var strStart = this.getField("userField").value;
if(strStart.length > 0) {
var dateStart = util.scand("dd/mm/yy",strStart);
var dateStartMilli = dateStart.getTime();
var oneDay = 24 * 60 * 60 * 1000 * 1; // number of milliseconds in one day
var dateMilli = dateStartMilli + oneDay;
var date = new Date(dateMilli);
event.value = util.printd("dd/mm/yy",date);
} else { event.value = "" }
Run Code Online (Sandbox Code Playgroud)
问题是如果我输入05/04/15到用户字段,结果是05/04/15(相同,错误),而一年中的任何其他日期正确递增一天(即25/10/15给出26/10/15,14/2/15给出15/2/15等)
同样的错误发生在2016年4月3日,2017年4月2日等(即每年)
我有两周(14)这些递增字段,每个字段使用与上面相同的javascript递增前一个计算字段的日期("userField"更改为date2,date3,date4等).非常奇怪的是,从05/04/15这两个中的第二个增加的下一个字段正确返回06/04/15并且之后没有问题.
有谁知道为什么会这样?!
这不会发生在我的浏览器的JavaScript引擎和/或我的语言环境中,因此它必须是Acrobat的东西,或者该日期在您的语言环境中可能是特殊的(例如,DST).
在任何情况下,这都不是将一天添加到JavaScript日期的正确方法,尤其是因为有些日子的时间超过了那么多毫秒而有些日子有更少(过渡到DST).
正确的方法是使用getDate和setDate:
var strStart = this.getField("userField").value;
if(strStart.length > 0) {
var dateStart = util.scand("dd/mm/yy",strStart);
dateStart.setDate(dateStart.getDate() + 1); // Add one day
event.value = util.printd("dd/mm/yy",dateStart);
} else { event.value = "" }
Run Code Online (Sandbox Code Playgroud)
setDate 如果你超过月底(按规格),它足够聪明,可以处理它.
如果它与DST相关,以上将解决它.如果它是一些奇怪的Acrobat的东西,也许它会解决它.无论哪种方式,都应该如何做到这一点.