如何比较JavaScript中的时间(仅几小时)?

时间:2013-06-30 08:03:25

标签: javascript time

我编写以下脚本来比较时间:

var TC1WarningTime = new Date(2013, 6-1, 30, 4), 
TC1WarningTimeformat = [TC1WarningTime.getDate(),
           (TC1WarningTime.getMonth()+1),
           TC1WarningTime.getFullYear()].join('/')+
          ' ' +
          [TC1WarningTime.getHours().padLeft()]+'HKT';

var TC1ReportTime = new Date(2013, 6-1, 30, 3), 
    TC1ReportTimeformat = [TC1ReportTime.getDate(),
           (TC1ReportTime.getMonth()+1),
           TC1ReportTime.getFullYear()].join('/')+
          ' ' +
          [TC1ReportTime.getHours().padLeft()]+'HKT';

var TC1CurrentTime = "";
if (TC1WarningTime>TC1ReportTime) {
    TC1CurrentTime = TC1WarningTimeformat; }
else { TC1CurrentTime = TC1ReportTimeformat; }

在上面的示例中,TC1WarningTime是30/6/2013 04:00,TC1ReportTime是30/6/2013 03:00。所以TC1WarningTime应该是> TC1ReportTime,但为什么结果给我TC1ReportTimeformat而不是TC1WarningTimeformat ??

2 个答案:

答案 0 :(得分:1)

你应该做的一件事是简化代码。您可以将这些块组合成一个函数,而不是重复的格式化代码:

function formatDate( date ) {
    return [
        date.getDate(),
        date.getMonth() + 1,
        date.getFullYear()
    ].join('/') + ' ' +
    [ date.getHours().padLeft() ] + 'HKT';
}

然后我们可以定义测试变量而不会出现任何复杂情况:

var
    dateWarn = new Date( 2013, 6-1, 30, 4 ),
    dateReport = new Date( 2013, 6-1, 30, 3 );

然后,为了比较它们并获得更晚的日期,您可以直接比较Date个对象,就像您已经在做的那样:

var dateLatest = dateWarn > dateReport ? dateWarn : dateReport;

或者,另一种方法是对它们使用Math.max()。这会将它们转换为数字并返回一个数字,因此您需要将其转换回Date

var dateLatest = new Date( Math.max( dateWarn, dateReport ) );

无论哪种方式,您都可以使用formatDate函数格式化结果:

var formattedDate = formatDate( dateLatest );

答案 1 :(得分:0)

使用getTime()进行比较。喜欢这个

var TC1CurrentTime = "";
    if (TC1WarningTime.getTime() >TC1ReportTime.getTime()) {
        TC1CurrentTime = TC1WarningTimeformat; }
    else { TC1CurrentTime = TC1ReportTimeformat; }