【发布时间】:2010-11-08 06:47:10
【问题描述】:
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 代码。目前,有效期为original date minus one day and original year minus X。
此代码的问题,首先,它没有考虑无效日期。例如,如果用户提供的日期是“1/10/2010”,则到期日期将为“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[1]), 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 object 会支持这些计算,但根据https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date,似乎不是......
【问题讨论】:
-
momentjs.com 让这种方式变得更容易:momentjs.com
标签: javascript datetime math