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 である必要がありますが、結果が TC1WarningTimeformat ではなく TC1ReportTimeformat になるのはなぜですか??

4

2 に答える 2

1

絶対にすべきことの 1 つは、コードを単純化することです。フォーマット コードを繰り返す代わりに、これらのブロックを 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 );
于 2013-06-30T08:28:24.513 に答える