【JavaScript】 Date.getTime() の単位は、"秒"じゃなくて"ミリ秒"

コンピュータプログラムの世界では、1970/01/01 00:00:00 は『UNIXエポック』などと呼ばれる特別な時刻。この時刻から数えた秒数のことを『UNIXタイム』と呼ぶ。PHPやPerlでは、 time() っていう関数でUNIXタイムを知ることができる。

JavaScript では、Date.getTime() というのを使うんだが、これが実は注意が必要。

PHP や Perl で取得できるUNIXタイムは、単位が "秒" なんだが、JavaScriptでは "ミリ秒" で返ってくるという点が異なる。

だから、JavaScript で PHP のような秒単位のUNIXタイムを使いたい場合は、1000で割るとちょうど近い値が取れる。

次の例は、2つの時刻情報を比較して、30日以上過去かどうかを調べたい場合。

//  【×】間違った例
var dateNow = new Date(2009,9-1,7);
var datePast = new Date(2009,9-1,1);
if( dateNow.getTime() > datePast.getTime()
         + 60*60*24*30 ){
    document.write('30日以上前です。');
}

こんな風に書いたりする。60*60*24*30 の部分が、60秒×60分×24時間×30日 で、30日分の秒数を表す。

でも実際は、扱う値の単位がミリ秒なので、この場合はさらに1000を掛けないといけない。

//  【◎】正しい例
var dateNow = new Date(2009,9-1,7);
var datePast = new Date(2009,9-1,1);
if( dateNow.getTime() > datePast.getTime()
         + 60*60*24*30*1000 ){
    document.write('30日以上前です。');
}

・・・というワナに最近ハマってもがいたので、メモしました。


余談だけれども、Opera10 の正式版が出たので、さっそくアップデートしてみた。まぁ、概ねいいんだけど、印刷機能が壊れっぱなしという点に大きく失望。
Operaだけじゃなくて、どのブラウザでも印刷用CSSをちゃんと処理できてなくて困る。

結構重要な機能だと思うんだけどなぁ・・・。


プロフィール

コヤナギ トモヤ

まったりウェブ系コーダーしてます。PHP製静的CMS Pickles 2 を開発しています。

RSSフィード

  • このサイトは、 コヤナギ トモヤ の個人サイトです。
  • 個人的な主張や、活動の記録などを掲載しています。 所属する企業、団体、その他の意見や立場を代表するものではありません。
  • 掲載された内容は古くなっている可能性があります。 特に古い記事では、現在の筆者の考えと異なる主張をしていることがありますが、記録としてそのまま残しております。 予めご了承ください。
ページの先頭へ戻る