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,, похоже, нет ...