getFullYear不是一个函数

时间:2014-06-23 12:58:03

标签: javascript forms adobe acrobat

我试图根据两个日期来确定年龄:出生日期和访问日期。每次我尝试以下列方式使用getFullYear();时:我收到错误

var b = getField("dob").value;
var c = b.getFullYear();

我在控制台中收到此错误。

b.getFullYear is not a function
2:Console:ExecException in line 2 of function top_level, script Console:Exec

TypeError: b.getFullYear is not a function
2:Console:Exec
undefined

我做错了什么?我已经尝试了各种方法来完成这项工作,唯一能做的就是使用substring()来获取日期的最后4位数。

日期格式为mm \ dd \ yyyy。

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试var b = new Date(getField("dob").value);

答案 1 :(得分:1)

你在评论中说过

  

dob字段是一个格式为dd / mm / yyyy的文本字段,这就是你所要求的

...你已经标记了你的问题acrobat,所以我猜这是在PDF中运行的JavaScript,而不是在网络浏览器中运行。

在浏览器上,如果您尝试解析dd/mm/yyyy形式的字符串(例如03/05/2014),则无论浏览器的位置如何(美国,英国,西班牙语,俄语,日语),浏览器将首先尝试将其读作mm/dd/yyyy(美国格式,月 - 日 - 年)。这没有在任何地方指定(当然不是在JavaScript规范中),但是对于我曾尝试过的每个浏览器都是如此。

如果 Acrobat做同样的事情,并且您将文本字段格式化为dd/mm/yyyy,那么您将遇到麻烦 - 是03/05/2014 5月3日或3月5日?在您使用的格式中,它是5月3日,但是在美国格式中它是3月5日。

除非您想在多个位置测试Acrobat(或者可以找到一个参考,承诺它将如何解析该字符串),否则您需要自己解析它。

如果你只想结束这一年,这很简单:

var match = getField("dob").value.match(/(\d{4})\s*$/);
var year = match ? match[1] : undefined;

那将是一个字符串。如果你想把它变成一个数字,你可以稍微改变第二行:

var year = match ? +match[1] : undefined;

+match[1](我们知道所有数字)转换为数字。)

如果您想要完整的日期,那么SO上有几个答案可以演示如何使用明确定义的格式解析日期。

答案 2 :(得分:0)

您可以检查b的类型是否为日期 对于Eg:

    var b = getField("dob").value;
    if(Object.prototype.toString.call(b) === '[object Date]')
    {
       var c = b.getFullYear();
    }
   else{
   alert("Not valid date");}