1

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

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?

4

2 回答 2

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()它们。这会将它们转换为数字并返回一个数字,因此您需要将其转换回 a Date

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

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

var formattedDate = formatDate( dateLatest );
于 2013-06-30T08:28:24.513 回答
0

比较使用getTime(). 像这样

var TC1CurrentTime = "";
    if (TC1WarningTime.getTime() >TC1ReportTime.getTime()) {
        TC1CurrentTime = TC1WarningTimeformat; }
    else { TC1CurrentTime = TC1ReportTimeformat; }
于 2013-06-30T08:45:47.187 回答