我正在使用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");
}
最初,此代码有效-仅在选择的日期不是今天的日期时抛出错误。现在,无论选择什么日期,我都会出错。
答案 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));
此:test_date.setDate(test_date.getDate())
无用。它只是将 test_date 的日期设置为已经具有的相同值。 ;-)