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 делает этот способ проще: http://momentjs.com/ – bernie2436