公開日: 2009年09月07日(Mon)
コンピュータプログラムの世界では、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をちゃんと処理できてなくて困る。
結構重要な機能だと思うんだけどなぁ・・・。
公開日: 2009年09月07日(Mon)