Не используя любую библиотеку вы могли бы сделать
function mydiff(aa,bb){var a,b;
if(aa<bb) a=aa,b=bb;
else a=bb,b=aa;
var am=a.getMonth(),ay=a.getFullYear();
var dd=b.getDate()-a.getDate();
var dm=b.getMonth()-am-(dd<0?1:0);
return b.getFullYear()-ay-(dm<0?1:0)+'y, '
+ ((12+dm)%12)+'m, '
+((dd<0?new Date(ay, am+1, 0).getDate():0)+dd)+'d';
}
dd
содержит разность «Ъ минус в дни месяца», который может быть отрицательным. В этом случае разница месяцев dm
должна быть уменьшена на 1, а дневная разница (отрицательная) должна быть увеличена на количество дней предыдущего месяца b
. Я получил формулу для «количества дней в конкретном месяце» от here. Подобные действия должны проводиться с месячными и годовыми различиями dm
и dm
.
Несколько примеров:
mydiff(new Date(2014,1,2),new Date(2014,2,1)) // "0y, 0m, 27d"
mydiff(new Date(2012,1,1),new Date(2012,2,1)) // "0y, 1m, 0d" (leap year)
mydiff(new Date(2012,1,2),new Date(2012,2,1)) // "0y, 0m, 28d" (leap year)
mydiff(new Date(2014,11,31),new Date(2015,0,1)) // "0y, 0m, 1d" (different years)
mydiff(new Date(2012,10,30),new Date(2013,1,28)) // "0y, 2m, 28d" (different years)
Последний пример показывает, что такого рода «расчет» имеет свои пределы: по сравнению с «нормальными» месяцев 28 дней не полный месяц. С другой стороны, по сравнению с текущим месяцем 28 февраля составляет полный месяц. Поэтому можно также утверждать, что правильный ответ должен быть "0y, 3m, 0d"
.
вы можете взять их в формат даты и вычесть. Он должен работать просто отлично –
Не 1 марта - 31 января, будет 1 месяц 1 день – phuzi
Возможный дубликат [Получите разницу между двумя датами в javascript?] (Http://stackoverflow.com/questions/3224834/get- разница между двумя датами в javascript) – APAD1