繁体   English   中英

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

[英]Date validation not working for PDF with three text boxes (WAS WORKING)

我正在使用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");
}

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

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

date != test_date.toString();

由于下一版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。 有关答案,请参阅比较两个日期与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的日期设置为已经具有的相同值。 ;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM