首页 > 解决方案 > 日期验证不适用于带有三个文本框的 PDF (WAS WORKING)

问题描述

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

Originally, this code was working-- only throwing an error if the date chosen was not today's date. 现在,无论选择什么日期,我都会收到错误消息。

标签: javascriptdatepdf

解决方案


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

date != test_date.toString();

由于下一版本的 ECMA-262要求Date.prototype.toString以 RFC 2822 格式返回一个字符串(例如 Mon, 25 Dec 1995 13:30:00 GMT),大多数新浏览器现在都在实现该格式。RFC 格式与 m/d/y 格式的字符串不匹配,因此比较将始终为真,

例如

'12/25/1995' != 'Mon, 25 Dec 1995 13:30:00 GMT'

使用这些格式时,任何日期都将始终如此。如需答案,请参阅使用 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的日期设置为它已经拥有的相同值。;-)


推荐阅读