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
.Проблемы с этим кодом, во-первых, он не учитывает недопустимые даты. Например, если дата, указанная пользователем, - «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
будет поддерживать эти вычисления, но согласно https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date кажется, нет ...