Ho calcolato utilizzando la funzione seguente e fornisce l'o/p nel formato di "X YEARS, Y MONTHS, Z DAYS" e per alcune date il suo dare sbagliato o/p. Penso di aver fatto qualche calcolo mancante nelle formule.Calcolo anno, mese, giorni tra le date nello script di google apps
La funzione è,
/**
* @param {Date} startdate
* @param {Date} enddate
* @return {String}
*/
function leasePeriodCalc(startDate,endDate)
{
var sdate=startDate;
var edate=endDate;
edate.setDate(edate.getDate()+1);
edate=new Date(edate);
if(sdate.valueOf()>edate.valueOf()){
return('0');
}
else{
var years=((((edate.getDate()-sdate.getDate())<0 ? -1:0)+((edate.getMonth()+1)-(sdate.getMonth()+1)))< 0 ? -1 : 0)+(edate.getFullYear()-sdate.getFullYear());
var months=((((edate.getDate()-sdate.getDate())<0 ? -1:0)+((edate.getMonth()+1)-(sdate.getMonth()+1)))< 0 ?12:0)+((edate.getDate()-sdate.getDate())<0 ? -1:0)+((edate.getMonth()+1)-(sdate.getMonth()+1));
if((edate.getMonth()-1)!=1.0)
{
var days=((edate.getDate()-sdate.getDate())< 0 ?new Date(edate.getFullYear(), edate.getMonth(),0).getDate():0)+(edate.getDate()-sdate.getDate());
}
else
{
var days=((edate.getDate()-sdate.getDate())< 0 ?new Date(edate.getFullYear(), edate.getMonth()+1,0).getDate():0)+(edate.getDate()-sdate.getDate());
}
var day;
var month;
var year;
if(years>1)year= years+ 'Years';
else year=years+'Year';
if(months>1) month= months+ 'Months';
else month=months+'Month';
if(days>1) day= days+ 'Days';
else day=days+'Day';
if(years==0&&months!=0&&days!=0) return(month+', '+day);
else if(years!=0&&months==0&&days!=0) return(year+', '+day);
else if(years!=0&&months!=0&&days==0) return(year+', '+month);
else if(years==0&&months==0&&days!=0) return(day);
else if(years==0&&months!=0&&days==0) return(month);
else if(years!=0&&months==0&&days==0) return(year);
else if(years==0&&months==0&&days==0) return(day);
else if(years!=0&&months!=0&&days!=0) return(year+', '+month+', '+day);
}
}
se ti da i/p come sotto di esso la restituzione del falso o/p:
28 feb 2013 - 28 febbraio 2014
Previsto o/p: 1 anno, 1 GIORNO
Dato O/P: 1 anno, 4 GIORNI
Ma se io Selec t 28 Feb 2013 - 27 feb 2014 mezzi, ha dato il corretto O/P:
atteso o/p: 1 ANNO
Dato O/P: 1 ANNO
Si prega di consulenza per correggere colpa mia se ho fatto qualcosa
E anche io devo dire che non sto impostando le regole n tutte. In generale un mese sta calcolando secondo i giorni che si trovano sul mese.
Ad esempio, se otteniamo un prestito da una banca, pagheremo gli interessi al mese, solo quel mese potrebbe avere 30 giorni o 29 giorni o 28 giorni o 31 giorni.
E anche se prendiamo una stanza per i mezzi di noleggio mensili, pagheremo l'affitto al mese solo rito? anche dal 20 marzo al 19 aprile. Anche se contiene 31 giorni, si dice che sia solo un mese. Per favore aiutami a concludere questo.
Tnx, CL.
miglior consiglio che posso darvi è quello di utilizzare moment.js per manipolare i valori di data (vedi http://momentjs.com/) – jbl
Perché si aspetterebbe differenza dal 28 febbraio 2013 - 28 feb 2014 per essere 1 anno 1 giorno? – HMR
Perché dovresti aspettarti che la differenza tra il 28 feb 2013 e il 27 feb 2014 sia di 1 anno invece di 11 mesi e 27 giorni? – HMR