具有三个文本框的日期验证不适用于PDF(正在工作)

时间:2018-07-31 21:02:29

标签: javascript date pdf

我正在使用Adobe Acrobat XI Pro。我在日期中使用三个文本框,其代码如下:

var month = this.getField("DATE_MONTH").valueAsString;
var day = this.getField("DATE_DAY").valueAsString;
var year = this.getField("DATE_YEAR").valueAsString;
var date = month + "/" + day + "/" + year;
var test_date = new Date();
test_date.setDate(test_date.getDate());

if(date != test_date){
    app.alert("The entered value needs to be TODAY'S date in the format mm/dd/yyyy");
}

最初,此代码有效-仅在选择的日期不是今天的日期时抛出错误。现在,无论选择什么日期,我都会出错。

1 个答案:

答案 0 :(得分:0)

变量 date 是格式为m / d / y的字符串,而 test_date 是Date对象。 !=比较将强制将Date转换为字符串,现在比较是有效的:

date != test_date.toString();

由于next version of ECMA-262要求 Date.prototype.toString 返回RFC 2822格式的字符串(例如,星期一,1995年12月25日13:30:00 GMT),因此大多数新浏览器是现在实施格式。 RFC格式与m / d / y格式的字符串不匹配,因此比较结果始终为true,

例如

'12/25/1995' != 'Mon, 25 Dec 1995 13:30:00 GMT'
使用这些格式时,

对于任何日期始终为true。有关答案,请参见Compare two dates with JavaScript

为了提供帮助,我对PDF中的ECMAScript一无所知,但您可能可以做到:

var month = this.getField("DATE_MONTH").valueAsString;
var day = this.getField("DATE_DAY").valueAsString;
var year = this.getField("DATE_YEAR").valueAsString;

// Compare date time values with time set to 00:00:00
if (+new Date(year, month - 1, day) != new Date().setHours(0,0,0,0))

一元+会将Date转换为数字,而 setHours 的返回值是新的时间值(也是数字),因此两个值都将被强制转换为数字。如果您想要更明确的内容,请考虑:

if (new Date(year, month - 1, day).getTime() != new Date().setHours(0,0,0,0))

var d = new Date();
var day = d.getDate();
var month = d.getMonth() + 1;
var year = d.getFullYear();

// Is today != today?
console.log( +new Date(year, month - 1, day) != new Date().setHours(0,0,0,0));

// Is today != tomorrow?
console.log( new Date(year, month - 1, day + 1).getTime() != new Date().setHours(0,0,0,0));

PS

此:test_date.setDate(test_date.getDate())无用。它只是将 test_date 的日期设置为已经具有的相同值。 ;-)