1

このようなトピックがたくさんあることは知っていますが、答えが見つからないという問題があります。私のスクリプトは次のとおりです。

window.onload = function(){
    // 200 seconds countdown
    var countdown = 14400; 
    //current timestamp
    var now   = Date.parse(new Date());

    //ready should be stored in your cookie
    if ( !document.cookie )
    {
        document.cookie = Date.parse(new Date (now + countdown  * 1000)); // * 1000 to get ms
    }

    //every 1000 ms
    setInterval(function()
    {
        var diff = ( document.cookie - Date.parse(new Date()) );

        if ( diff > 0 )
        {
            var message = diff/1000 + " seconds left";
        }
        else
        {
            var message = "finished";
        }

        document.body.innerHTML = message;

    },1000);
}

クッキーの値に応じて残り時間をユーザーに知らせるカウントダウンタイマーを作成したいと思います。これまでのところ、2つの値の差を計算することはできましたが、タイムスタンプの差(diff)から「dd/mm/yy hh:mm:ss」のような形式を作成する方法がわかりません。それはまったく可能ですか?

4

3 に答える 3

2

あなたが望むのは、(ミリ)秒単位の差を次のようなものに変換する関数です

5日 4時間 3分 2秒

数か月以上の期間の日数が多いことを気にしない場合は、次のようなものを使用できます。

function human_time_difference(diff) {
    var s = diff % 60; diff = Math.floor(diff / 60);
    var min = diff % 60; diff = Math.floor(diff / 60);
    var hr = diff % 24; diff = Math.floor(diff / 24);
    var days = diff;

    return days + 'd ' + hr + 'h ' + min + 'm ' + s + 's';
}

ミリ秒単位の差がある場合は、その数値を 1000 で割った値を渡す必要があります。Math.round を使用して分数を取り除くこともできますが、その情報を表示したい場合はそのままにしておくこともできます。

月数と年数を取得するのは、次の 2 つの理由からやや複雑です。

  1. 1 か月の日数はさまざまです。
  2. ある月の半ばから次の月の半ばに移動する場合、日数が 31 日を超えていても、期間は月全体をカバーしません (たとえば、6 月 2 日から次の月までの間に何ヶ月ありますか)。 7月30日??)

2 つの時間の間の月数が本当に必要な場合は、それらの間の秒数では十分ではありません。開始日と終了日 + 時刻を渡す必要があるカレンダー ロジックを使用する必要があります。

PS: 質問を投稿するときは、無関係な詳細を避けてください。たとえば、あなたの質問は、Cookie、setInterval、または onload ハンドラーとは何の関係もありません。あなたが知らない唯一の部分は、(ミリ)秒を日、時間などに変換する方法です。何かをしようとしている理由についての背景を提供すると役立つかもしれませんが、基本的な質問です。重要な部分にたどり着くまでに苦労しないように、最後に質問してください。同じアドバイスがあなたのタイトルにも当てはまります。無関係な詳細 (Cookie やカウントダウンなど) を除外して、関連性があることを確認してください。

于 2010-06-26T00:00:44.903 に答える
0

JavaScript には、PHP を使用したことがある場合に期待するような組み込みの日付フォーマット メソッドはありません。代わりに、文字列を手動で作成する必要があります。ただし、この目的に役立つ getter メソッドがいくつかあります。JavaScript を使用して時刻と日付をフォーマットする 10 の方法を参照してください。

また、ご存知のとおりです。 Date.parseタイムスタンプのミリ秒部分は返しません (切り捨てます)。ミリ秒が必要な場合は、次のいずれかを実行できます

var d = new Date();
var timestamp_ms = Date.parse(d) + d.getMilliseconds();

あるいは単に

var timestamp_ms = +d;
于 2010-06-25T23:04:49.157 に答える
-1
  1. Cookie を確認する理由がわかりませんがif ( !document.cookie )、私のブラウザでは機能しないため、次のように変更しました。if ( document.cookie )

  2. toString関数などを試してみてください。javascript Date オブジェクト参照でそれらを調べてください。例えば、

            var t = new Date;
        t.setTime(diff);
        var message = t.toTimeString() + " seconds left";
    

11:59:58 seconds leftこれは私のブラウザに印刷されます。

于 2010-06-25T23:40:37.167 に答える