2009年02月14日 08:31 [Edit]

javascript - 1234567890記念時刻カウンター

というわけで、記念時刻をカウントダウンするスクリプト。

初出2009.02.12; 記念時刻が近づいたので更新;無事終了で再更新
バレンタインデーに、UNIX timeが1234567890に : Gizmodo Japan(ギズモード・ジャパン), ガジェット情報満載ブログ
今年のバレンタインデーは、意中の相手からチョコがもらえるかどうかどころじゃないですよ。なんとUNIX timeが「1234567890」になるんです!

ソース

(function(id, when, title){
    var div = function(n, d){ return (n - n % d) / d };
    var w = window, d = document;
    var node = d.getElementById(id);
    var interval;
    interval = w.setInterval(function(){
        var delta = when * 1000 - (new Date()).getTime();
        if (delta < 0){
            w.clearInterval(interval);
            node.innerHTML = title + 'は終了しました。';
            return;
        }
        node.innerHTML = [
            title, 'まで、あと',
            div(delta, 3600e3),      '時間',
            div(delta,   60e3) % 60, '分',
            div(delta,    1e3) % 60, '秒'
        ].join('');
    }, 500);
})(
    'countdown',            // DOM id
    1234567890,             // 記念時刻(秒)
    'time() = 1234567890'   // タイトル
);

解説

関数に名前付けるのがまんどくさかったので、こんな書き方してます。1000msではなく500msごとに書き換えているのは、秒飛びを防ぐため。見ての通り、今回のイベント以外にも使えるような書き方をしています。記念日を過ぎてもカウントするようなことがないようになってます。

UNIX time が「1234567890」になる - スラッシュドット・ジャパン
本家記事より、今週の13日の金曜日、UNIX Time(すなわち、1970年1月1日からの累積秒)が「1234567890」になる。と言っても、正確には「2009年2月13日11:31:30pm」はUTCでの表記であるので、日本時間では14日であることに注意してもらいたい。本家タレコミからリンクされているLinux Pro Magazineで紹介されているように、Perl Script「perl -e 'print scalar localtime(1234567890),"\n";' 」で自分の地方時における時間を知ることができる。

JavaScriptだと、(new Date(1234567890e3)).toString()といったところでしょうか。

Enjoy!

Dan the Man Who was Born Before time(0)

追記:

その瞬間をスナップショットしてくれた方がいらっしゃいます。

1234567890.jpg

ありがとうございました>id:tricksterchaos


この記事へのトラックバックURL

この記事へのトラックバック
あと1時間弱で1234567890秒ですね。 移動中なので立ち会えません。残念。...
1234567890【imaismix】at 2009年02月14日 07:45
全世界300万人(国連推計)のゾロ目・並び目フリークの皆様、ご機嫌麗しゅうございます。本日は当社内非公認コミュニティ「ゾロ目・並び目友の会」から、来たる2009年2月14日(土) 午前8...
1234567890秒に寄せて【Blogo el Ermitejo】at 2009年02月13日 02:15
この記事へのコメント
あーあ、見逃しちゃった…orz
Posted by U D at 2009年02月14日 17:36
>>ありがとうございました>id:tricksterchaos
恐縮です。いつも読ませていただいてます。
こちらこそありがとうございます。
Posted by tricksterchaos at 2009年02月14日 11:35
あんちもん2(通りすがり)さん、
あれ?ほんとだ。
というわけで s/Interval/Timeout/g しました。ありがとうございます。
Dan the Typo Generator
Posted by at 2009年02月14日 01:47
setIntervalで設定したタイマーってclearTimeoutでクリアできましたっけ?
実質そのコードだと、クリアされなかったとしても「その時」を過ぎたら毎回「終了しました」を書きだすだけだから、見た目上は実質問題ないですけれど。

あと、インターバルを200あたりにすると、時刻の誤差がより少なくなりますし、負荷もそれほどかからない(高々2.5倍)のでオススメです。
Posted by あんちもん2(通りすがり) at 2009年02月14日 01:22
ruby -e 'p Time.at(1234567890)'
ですね。
Posted by rubyだと at 2009年02月13日 00:38
関数に名前付けるのは、すごーく
まんどくさいですね。
Posted by たしかに at 2009年02月12日 16:24