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);
Questo è il codice Javascript che sto utilizzando per calcolare una data di scadenza data una data immessa dall'utente. Attualmente la data di scadenza è original date minus one day and original year minus X
.Sottrarre giorni/mesi/anni da un oggetto Data
I problemi con questo codice, in primo luogo, non tengono conto delle date non valide. Ad esempio, se la data di fornitura dell'utente è "1/10/2010", la data di scadenza sarà "0/10/2013" (supponendo che la data di scadenza sia +3 anni).
avrei potuto fare qualcosa di simile:
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);
Ma più problemi sorgono ... In primo luogo, il codice diventa un po 'contorto. In secondo luogo, questo controllo dovrebbe essere fatto il giorno. e poi il mese. C'è un modo più semplice e pulito?
Inoltre, c'è una determinata circostanza che implicherebbe la necessità di calcolare la data di scadenza fino alla "fine del mese" per quella data. Per esempio:
Expiry date is: +3 years
User date is: '14/10/2010'
Expiry date is: '31/10/2013'
Speravo che la Date object
sosterrebbe questi calcoli ma secondo https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date, non sembra ...
momentjs.com rende questo modo più semplice: http://momentjs.com/ – bernie2436