2

私のアプリでは、ユーザーはコメントを投稿し、コメントの有効期限を指定できます。

プロセスは簡単です:

彼らは日付を選択し、日付はPHPによるコメント(Ymd H:m:s)とともにDB内に挿入されます。

次に、コメントを視覚化するときに、各コメントにJSカウントダウンを設定します。

カウントダウンは、現在のJS日時からDBがexpiration_datetime CONVERTED IN JSに保存されるまで、JSによって計算されます。これは、コメントごとに行われます。

それで、PHPを使用して挿入し、次にJSを使用して出力するときに、タイムゾーンとユーザーのブラウザーの日時とサーバーの日時に関連する問題が発生するのではないかと思います。

PHPでは:

$expiration_datetime = date('Y-m-d H:m:s');

JSで私は変換します:

var expiration_datetime = new Date(<?php $expiration_datetime[0]?>,<?php $expiration_datetime[1]?>,<?php $expiration_datetime[2]?>,<?php $expiration_datetime[3]?>,<?php $expiration_datetime[4]?>,<?php $expiration_datetime[5]?>,);

したがって、JSで日時を変換すると、タイムゾーンが異なるユーザーに何らかの問題が発生するのではないかと思います。最後に、ベストプラクティスを使用するために注意を払う、または実行することをお勧めしますか?

詳細:

日付と日時にサーバーとjsの固定タイムゾーンを設定することは、サイトにアクセスするすべてのユーザーにとって一意になると思いますが、同意しましたか?

4

2 に答える 2

1

JavaScript Date()オブジェクトは、エポック(1970年1月1日)からのミリ秒数のオフセットとして日付を格納するため、提案した方法で日付を作成するだけで、ユーザーのタイムゾーンが考慮されます。

データベースに保存した日付をGMTに正規化すると、ベルトとブレースのアプローチを採用して次のように使用できます。

var expiration_datetime = new Date(Date.UTC(
    <?php $expiration_datetime[0]?>, <?php $expiration_datetime[1]?>,
    <?php $expiration_datetime[2]?>, <?php $expiration_datetime[3]?>,
    <?php $expiration_datetime[4]?>, <?php $expiration_datetime[5]?>,
));

これは、JSパーサーが受信する日付情報がGMTであることをJSパーサーに示す必要があります。

于 2012-11-02T09:54:57.090 に答える
0

UNIXタイムスタンプを使用し、ビルドインJS日付コンストラクターを使用してそれから日付を作成します。

php:  time()
js: new Date(ms)

注:php関数は秒を返し、jsはミリ秒を使用します。1000を掛けることを忘れないでください

于 2012-11-02T09:41:41.187 に答える