为什么这个PDF javascript日期每年只被错误计算一次?

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并且之后没有问题.

有谁知道为什么会这样?!

T.J*_*der 6

这不会发生在我的浏览器的JavaScript引擎和/或我的语言环境中,因此它必须是Acrobat的东西,或者该日期在您的语言环境中可能是特殊的(例如,DST).

在任何情况下,这都不是将一天添加到JavaScript日期的正确方法,尤其是因为有些日子的时间超过了那么多毫秒而有些日子有更少(过渡到DST).

正确的方法是使用getDatesetDate:

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的东西,也许它会解决它.无论哪种方式,都应该如何做到这一点.