首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript中日期之间的差异

JavaScript中日期之间的差异
EN

Stack Overflow用户
提问于 2009-12-28 14:02:22
回答 5查看 127.4K关注 0票数 74

如何找出两个日期之间的差异?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-12-28 14:04:59

通过使用Date对象及其毫秒值,可以计算差值:

代码语言:javascript
复制
var a = new Date(); // Current date now.
var b = new Date(2010, 0, 1, 0, 0, 0, 0); // Start of 2010.
var d = (b-a); // Difference in milliseconds.

您可以通过将毫秒除以1000将其转换为秒,然后将结果转换为整数(这将删除表示毫秒的小数部分),从而获得秒数(作为整数/整数):

代码语言:javascript
复制
var seconds = parseInt((b-a)/1000);

然后,您可以通过将seconds除以60并将其转换为整数来获得整个minutes,然后通过将minutes除以60并将其转换为整数来获得hours,然后以同样的方式将其转换为更长的时间单位。由此,可以创建在较低单位和剩余较低单位的值中获得时间单位的最大整量的函数:

代码语言:javascript
复制
function get_whole_values(base_value, time_fractions) {
    time_data = [base_value];
    for (i = 0; i < time_fractions.length; i++) {
        time_data.push(parseInt(time_data[i]/time_fractions[i]));
        time_data[i] = time_data[i] % time_fractions[i];
    }; return time_data;
};
// Input parameters below: base value of 72000 milliseconds, time fractions are
// 1000 (amount of milliseconds in a second) and 60 (amount of seconds in a minute). 
console.log(get_whole_values(72000, [1000, 60]));
// -> [0,12,1] # 0 whole milliseconds, 12 whole seconds, 1 whole minute.

如果您想知道上面为第二个Date object提供的输入参数是什么,请查看它们的名称:

代码语言:javascript
复制
new Date(<year>, <month>, <day>, <hours>, <minutes>, <seconds>, <milliseconds>);

正如本解决方案的注释中所指出的,您不一定需要提供所有这些值,除非它们对于您希望表示的日期是必要的。

票数 116
EN

Stack Overflow用户

发布于 2010-03-08 18:31:03

代码语言:javascript
复制
    // This is for first date
    first = new Date(2010, 03, 08, 15, 30, 10); // Get the first date epoch object
    document.write((first.getTime())/1000); // get the actual epoch values
    second = new Date(2012, 03, 08, 15, 30, 10); // Get the first date epoch object
    document.write((second.getTime())/1000); // get the actual epoch values
    diff= second - first ;
    one_day_epoch = 24*60*60 ;  // calculating one epoch
    if ( diff/ one_day_epoch > 365 ) // check , is it exceei
    {
    alert( 'date is exceeding one year');
    }
票数 3
EN

Stack Overflow用户

发布于 2016-05-12 22:42:12

如果您正在寻找以年、月和天的组合表示的差异,我建议使用此函数:

代码语言:javascript
复制
function interval(date1, date2) {
    if (date1 > date2) { // swap
        var result = interval(date2, date1);
        result.years  = -result.years;
        result.months = -result.months;
        result.days   = -result.days;
        result.hours  = -result.hours;
        return result;
    }
    result = {
        years:  date2.getYear()  - date1.getYear(),
        months: date2.getMonth() - date1.getMonth(),
        days:   date2.getDate()  - date1.getDate(),
        hours:  date2.getHours() - date1.getHours()
    };
    if (result.hours < 0) {
        result.days--;
        result.hours += 24;
    }
    if (result.days < 0) {
        result.months--;
        // days = days left in date1's month, 
        //   plus days that have passed in date2's month
        var copy1 = new Date(date1.getTime());
        copy1.setDate(32);
        result.days = 32-date1.getDate()-copy1.getDate()+date2.getDate();
    }
    if (result.months < 0) {
        result.years--;
        result.months+=12;
    }
    return result;
}

// Be aware that the month argument is zero-based (January = 0)
var date1 = new Date(2015, 4-1, 6);
var date2 = new Date(2015, 5-1, 9);

document.write(JSON.stringify(interval(date1, date2)));

这个解决方案将以我们自然会做的方式(我认为)来处理闰年(2月29日)和月份长度的差异。

因此,2015年2月28日和2015年3月28日之间的间隔将被视为恰好一个月,而不是28天。如果这两天都是2016年,差异仍然是一个月,而不是29天。

具有完全相同的月份和日期,但不同年份的日期,将始终具有精确的年份差异。因此,2015-03-01和2016-03-01之间的差异将恰好是1年,而不是1年零1天(因为将365天视为1年)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1968167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档