gpt4 book ai didi

javascript - 在 JavaScript 中计算以年、月和日为单位的时间跨度

转载 作者:行者123 更新时间:2023-11-30 17:15:53 24 4
gpt4 key购买 nike

我想计算两个日期之间的时间跨度(注意:输入格式为 dd.MM.yyyy,请参见下面的代码)。特别的是,不想每个月使用 30 天,一年使用 360 天。我更想要“人类格式”的区别(不知道怎么调用它)。

比方说,我想计算从 10 月 1 日(2014 年)到 2015 年 3 月 17 日的差异(包括最后一天)。从 10 月到 2 月这将是 5 个月。然后剩下的就是18天(从第1天到第17天,包括第17天)。所以结果应该是:

0 years, 5 months, 18 days

这种计算当然忽略了某些月份有 31、30、28 或 29 天(天计算除外,当日期为这种形式时:开始日期:2014 年 10 月 17 日;结束日期:1 月 12 日, 2015).

不幸的是,我没有找到任何已经实现这种计算的 JS 库。 Moments.js,似乎没有任何方法。

所以我开始创建自己的代码,但我仍然总是离预期结果有几天(2-3 天)。老实说,如果我看一下我的代码,我会觉得它很糟糕,必须有一种更智能、更优雅的方法来计算它(在我的例子中,我将它输出到一个跨度):

function getTimeDifferenceContract(startDateStr, endDateStr) {
var returnObject = { "years": null, "months": null, "days": null };
var startDateArray = startDateStr.split('.');
var endDateArray = endDateStr.split('.');
var startMonthIx = startDateArray[1]-1;
var endMonthIx = endDateArray[1]-1;
var startDate = new Date(startDateArray[2], startMonthIx, startDateArray[0]);
var endDate = new Date(endDateArray[2], endMonthIx, endDateArray[0]);

var endDateFixed = new Date(endDate.getTime()+(1*24*60*60*1000));

if (endDate > startDate) {
var years = 0;
var months = 0;
var days = 0;
var dateDiff = endDateFixed.getTime() - startDate.getTime();

var sD = startDate.getDate();
var sM = startDate.getMonth()+1;
var sY = startDate.getFullYear();

var eD = endDateFixed.getDate();
var eM = endDateFixed.getMonth()+1;
var eY = endDateFixed.getFullYear();

if (sY == eY && sM == eM) {
days = Math.floor(dateDiff / (1000 * 60 * 60 * 24));
}
else if (sY == eY) {
if (sD > eD) {
months = eM - sM - 1;
var startMonthRestDays = getMonthdays(sM, sY) - sD;
days = startMonthRestDays + eD;
}
else {
months = eM - sM;
days = eD - sD;
}
}
else {
years = eY - sY - 1;
var monthForYears = 0;
if (years > 0) {
monthForYears = (years - 1) * 12;
} else {
monthForYears = years * 12;
}
months = (12 - sM) + (eM - 1) + (monthForYears)
var startMonthRestDays = getMonthdays(sM, sY) - sD;
days = startMonthRestDays + eD - 0;
}

var lastMonth = eM - 1;
var yearForEndMonthDays = eY;
if (lastMonth < 1) {
lastMonth = 12;
yearForEndMonthDays = eY - 1;
}
var endMonthDays = getMonthdays(lastMonth, yearForEndMonthDays);
if (days >= endMonthDays) {
months = months + 1;
days = days - endMonthDays - 1;
}
if (months >= 12) {
years = years + 1;
months = months - 12;
}

returnObject.years = years;
returnObject.months = months;
returnObject.days = days;
}
return returnObject;
}

function main() {
var difference = getTimeDifferenceContract("30.09.2014", "01.10.2015");
var years = difference.years;
var months = difference.months;
var days = difference.days;

jQuery('#myText').text(years + " years, " + months + " months, " + days + " days");
}

main();

fiddle :http://jsfiddle.net/4ddL27gx/2/

有什么解决办法吗?

最佳答案

我希望这会有所帮助:

Obtain difference between two dates in years, months, days in JavaScript

我有同样的需要但没有答案所以我写了一个似乎有效的函数......

关于javascript - 在 JavaScript 中计算以年、月和日为单位的时间跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26137094/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com