【问题标题】:getFullYear is not a functiongetFullYear 不是函数
【发布时间】:2014-06-23 12:58:02
【问题描述】:

我试图根据两个日期获取年龄:出生日期和访问日期。每次我尝试以下列方式使用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。

谢谢!

【问题讨论】:

  • 您能否添加getField 的内容,因为您似乎没有返回日期对象。
  • dob 字段是一个文本字段,格式为 dd/mm/yyyy 这就是您要问的吗?这是我第一次编写任何东西,所以请耐心等待我的问题,即使它们听起来很空洞。谢谢!

标签: javascript forms adobe acrobat


【解决方案1】:

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

【讨论】:

  • 确定 Acrobat 的new Date() 实现将正确解释 OP 说他/她使用的格式的日期吗? :-) 没有网络浏览器会(当在日期字符串中使用/ 时,所有当前浏览器都会首先尝试以美国格式解析,即月-日-年,而不是日-月-年,即使在非美国也是如此。语言环境)。
【解决方案2】:

您可以检查 b 的类型是否为 Date 例如:

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

【讨论】:

    【解决方案3】:

    在你说的评论中

    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] 转换为数字。)

    如果您想要完整的日期,这里有几个答案可以演示如何解析具有明确定义格式的日期。

    【讨论】:

    • 仅当用户代理支持输入类型日期时,否则将字符串解析为日期和以往一样有问题。
    • @RobG:非常好点,而且这种支持很糟糕。但是考虑到acrobat 标签(我一开始错过了),我认为他们根本没有使用 HTML 或浏览器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多