js new Date() 返回NaN的问题

在项目中使用了 Nashorn,脚本中使用new Date() 获取了年月日,并重新new Date(timestamp)创建Date对象。

现象:

在别的函数中引用当前函数没问题,能返回正确的时间戳,但是自己直接调用,结果直接返回NaN

原因有二:

1. timestamp作为参数传入函数中,long类型被转成了字符串类型;

2. 有另一个参数months是int类型,也被转成了字符串,导致在月份11 + 1的时候,变成了"11" + 1 = "111",然后根据年月日拼接日期的时候,月份是111,new Date('xxxx-xxxx-xxxx 00:00:00')这样就不会正常返回日期了。

解决办法:

在参数使用前先转换成数值型

timestamp = parseInt(timestamp);
months = parseInt(months);

附上函数:

function addMonths(timestamp, months){
            timestamp = parseInt(timestamp);
            months = parseInt(months);

            var date = new Date(timestamp);
            var y = date.getFullYear();
            var m = date.getMonth();
            var d = date.getDate();

            var hour = date.getHours();
            var minute = date.getMinutes();
            var second = date.getSeconds();

            y += Math.floor((m + months) / 12); //计算年
            m = Math.floor((m + months) % 12) + 1; //计算月
            if(m <= 0){
            m += 12;
            }
            var d_max = new Date(y + "/" + (m+1)+ "/0").getDate();  //获取计算后的月的最大天数

            if (d > d_max) {
            d = d_max;
            }

            return new Date(y + "/" + (m < 10 ? ("0" + m) : m) + "/" + (d < 10 ? ("0" + d) : d)
            + " " + (hour < 10 ? ("0" + hour) : hour) + ":" + (minute < 10 ? ("0" + minute) : minute)
            + ":" + (second < 10 ? ("0" + second) : second)).getTime(); 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值