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