所以我写了一些东西来计算,它似乎有效,但也许这里的一些专家可以进行更正或帮助使这更简单。
答案 0 :(得分:5)
您可以使用moment.js来简化此操作:
function difference(d1, d2) {
var m = moment(d1);
var years = m.diff(d2, 'years');
m.add(-years, 'years');
var months = m.diff(d2, 'months');
m.add(-months, 'months');
var days = m.diff(d2, 'days');
return {years: years, months: months, days: days};
}
例如,
> difference(Date.parse("2014/01/20"), Date.parse("2012/08/17"))
Object {years: 1, months: 5, days: 3}
moment.js还可以返回人类可读的差异("在一年中#34;)如果这是你真正追求的。
答案 1 :(得分:2)
所以这是我的功能,这将收到两个日期,完成所有工作并返回一个包含3个值,年,月和日的json。
var DifFechas = {};
// difference in years, months, and days between 2 dates
DifFechas.AMD = function(dIni, dFin) {
var dAux, nAnos, nMeses, nDias, cRetorno
// final date always greater than the initial
if (dIni > dFin) {
dAux = dIni
dIni = dFin
dFin = dAux
}
// calculate years
nAnos = dFin.getFullYear() - dIni.getFullYear()
// translate the initial date to the same year that the final
dAux = new Date(dIni.getFullYear() + nAnos, dIni.getMonth(), dIni.getDate())
// Check if we have to take a year off because it is not full
if (dAux > dFin) {
--nAnos
}
// calculate months
nMeses = dFin.getMonth() - dIni.getMonth()
// We add in months the part of the incomplete Year
if (nMeses < 0) {
nMeses = nMeses + 12
}
// Calculate days
nDias = dFin.getDate() - dIni.getDate()
// We add in days the part of the incomplete month
if (nDias < 0) {
nDias = nDias + this.DiasDelMes(dIni)
}
// if the day is greater, we quit the month
if (dFin.getDate() < dIni.getDate()) {
if (nMeses == 0) {
nMeses = 11
}
else {
--nMeses
}
}
cRetorno = {"años":nAnos,"meses":nMeses,"dias":nDias}
return cRetorno
}
DifFechas.DiasDelMes = function (date) {
date = new Date(date);
return 32 - new Date(date.getFullYear(), date.getMonth(), 32).getDate();
}
希望这有助于人们寻找解决方案。
这是其他人所做的新版本,似乎没有错误,希望这更好用