我编写以下脚本来比较时间:
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 ??
答案 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; }