Использование .getTime для преобразования даты в миллисекундах:
var date1 = new Date(),
date2 = new Date(someDate),
diff = Math.abs(date1.getTime() - date2.getTime());
// then convert into years, months, etc
EDIT: Вы не можете уйти от усреднения длины месяцев как проблема часто будет неоднозначным. например, если подсчет разницы между 3 февраля и 10 марта составляет 1 месяц и 7 дней (если месяц составляет 28 дней, как в феврале) или 1 месяц и 4 дня (если месяц составляет 31 день, как в марте)?
EDIT2: исправлена моя истинно ужасная математика.
EDIT3: На самом деле, думая об этом, любой нормальный человек переносит день с первого месяца на последний месяц и использует его для расчета разницы в днях. Итак:
var date1 = new Date(),
date2 = new Date(1981, 10, 18);
switch = (date2.getTime() - date1.getTime()) < 0 ? false : true, // work out which is the later date
laterDate = switch ? date2 : date1;
earlierDate = switch ? date1 : date2;
dayDiff = laterDate.getDate() - earlierDate.getDate(),
monthDiff = laterDate.getMonth() - earlierDate.getMonth(), // javascript uses zero-indexed months (0-11 rather than the more conventional 1-12)
yearDiff = laterDate.getFullYear() - earlierDate.getFullYear(),
months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (dayDiff < 0) {
monthDiff--;
dayDiff += months[laterDate.getMonth()-1]; // -1 because we want the previous month
}
if (monthDiff < 0) {
yearDiff--;
monthDiff += 12;
}
console.log(yearDiff+' years, '+monthDiff+' months, '+dayDiff+' days');
Я думаю, что это заставляет нас большую часть пути там, но мы все еще должны рассмотреть високосные
EDIT 4: Исправлена пара (иногда, но, к сожалению, не всегда стирает) от по 1 ошибкам
Когда вы говорите «берет две даты и возвращает строку», что именно вы возвращаетесь? Вы ищете разницу между двумя датами? – sbatson5
да, я в основном ищу разницу между двумя датами (или датой и сейчас). Я могу сделать окончательный формат строки самостоятельно. Это те числовые значения, с которыми я столкнулся. – JonnyRobbie
Когда я вычитаю даты, разве я не получу разницу в миллисекундах? Я хотел бы преобразовать это в yy, mm, dd, hh, mm, ss, и эти месяцы проблематичны. – JonnyRobbie