var inputDate = '20/4/2010'.split('/'); var dateFormatted = new Date(parseInt(inputDate[2]),parseInt(inputDate[1]),parseInt(inputDate[0])); var expiryDate = (dateFormatted.getDate() - 1) + '/' + dateFormatted.getMonth() + '/' + (dateFormatted.getFullYear() + year);
这是我用来确定用户输入日期的到期日期的Javascript代码.目前,到期日为原始日期减去一天,原始年减去X.
这个代码的问题首先是没有考虑到无效的日期.例如,如果用户提供的日期是“2010年10月10日”,则到期日为“0/10/2013”(假设有效期为3年).
我可以做一些像:
var inputDate = '20/4/2010'.split('/'); var day = parseInt(inputDate[0]); var month = parseInt(inputDate[1]); var year = parseInt(inputDate[2]); if (day < 1) { if (month == ...) { day = 31 month = month - 1; } else { day = 30 month = month - 1; } } var dateFormatted = new Date(parseInt(inputDate[2]),parseInt(inputDate[0])); var expiryDate = (dateFormatted.getDate() - 1) + '/' + dateFormatted.getMonth() + '/' + (dateFormatted.getFullYear() + year);
但更多的问题出现了…首先,代码有点复杂.其次,这项检查必须在当天完成.然后一个月.有没有更简单的方法?
此外,有一些情况会涉及到我需要计算到该日期的“月末”的有效期.例如:
Expiry date is: +3 years User date is: '14/10/2010' Expiry date is: '31/10/2013'
我希望Date对象能支持这些计算,但根据https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date,似乎没有…
解决方法
查看输入的日期是否有效日期的简单方法:
var d = Date.parse('4/20/2010'); if (isNaN(d.valueOf())) { alert ("bad date value"); }
然后,这是一个我定期使用的dateAdd函数.扩展Date对象,因此易于使用:
Date.prototype.dateAdd = function(size,value) { value = parseInt(value); var incr = 0; switch (size) { case 'day': incr = value * 24; this.dateAdd('hour',incr); break; case 'hour': incr = value * 60; this.dateAdd('minute',incr); break; case 'week': incr = value * 7; this.dateAdd('day',incr); break; case 'minute': incr = value * 60; this.dateAdd('second',incr); break; case 'second': incr = value * 1000; this.dateAdd('millisecond',incr); break; case 'month': value = value + this.getUTCMonth(); if (value/12>0) { this.dateAdd('year',value/12); value = value % 12; } this.setUTCMonth(value); break; case 'millisecond': this.setTime(this.getTime() + value); break; case 'year': this.setFullYear(this.getUTCFullYear()+value); break; default: throw new Error('Invalid date increment passed'); break; } }
然后只需使用:
var d = new Date(); d.dateAdd('day',-1).dateAdd('year',3);
T’da