【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をちゃんと処理できてなくて困る。

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


プロフィール

コヤナギ トモヤ

ウェブ系エンジニアしてます。ウェブデザイナー、ウェブディレクターとしてウェブ制作の仕事に携わり、今はエンジニア職に流れ着きました。誰かのお仕事をちょっとだけ効率化するような支援ツールの開発が好き。オープンソースとMITライセンス大好き。人生後半は自由と民主主義のコントリビューターとして過ごす予定。

ウェブ制作支援ツール Pickles 2 をオープンソースで開発しています。

PHP/JavaScript/NodeJS/nwjs/Laravel/Pickles2/オープンソース/心理学/倫理/自由と民主主義

RSSフィード

ページの先頭へ戻る