機能してから時間がかかる通知システムを作っています。
私はこのスクリプトをtimesincefunction(jQuery)に使用しています:
$.fn.updateSince = function(interval) {
var times = this.map(function(){ return { e: $(this), t: parseInt($(this).html()) }; });
var format = function(t) {
if(t > 86400) {
return Math.floor(t / 86400) + ' days ago';
} else if (t > 3600) {
return Math.floor(t / 3600) + ' hours ago';
} else if (t > 60) {
return Math.floor(t / 60) + ' minute ago';
} else if (t > 50) {
return '50 seconds ago';
} else if (t > 40) {
return '40 seconds ago';
} else if (t > 30) {
return '30 seconds ago';
} else if (t > 25) {
return '25 seconds ago';
} else if (t > 15) {
return '15 seconds ago';
} else if (t > 10) {
return '10 seconds ago';
} else {
return 'a few seconds ago';
}
}
var update = function(){
var now = new Date().getTime();
$.each(times, function(i, o){
o.e.html(format(Math.round((now - o.t) / 1000)));
});
};
window.setInterval(update, interval);
update();
return this;
}
通知はMySQLデータベースに保存され、各通知には次の形式のタイムスタンプがあります:2012-12-26 06:21:28
PHP strtotimeを使用し、通知項目ごとにデータベースからタイムアウトを取得するときにUTC形式に変更します:(php)
$rows['time']= strtotime($temp_time." UTC");
ajaxを使用して、それをクライアントブラウザに戻すとき。UTC時間(データベースから)に1000(javascript)を掛けます
var time = parseInt(dbtime * 1000);
次に、jQueryのtimesince関数を使用して、それを時間前に変換できます。
問題: サーバーの時間はクライアントのブラウザの時間によって異なります。それらを互いに「互換性がある」ようにするにはどうすればよいですか。
たとえば、クライアントのブラウザに応じて2時間前に通知が行われます。しかし、PHPは7時間前に作ったと言っています。クライアントブラウザのタイムゾーンがサーバーのタイムゾーンと異なるため
私の論理は次のとおりです。1。[PHP]現在の時刻を取得し、データベースから取得した通知時刻を使用して減算します。データベース時間-現在の時間=サーバー側の時差
- [PHP]それから時差が出ます。この場合は7時間です。
- [PHP] 7時間をUTC形式に変換するにはどうすればよいですか?
- [Javascript]現在のクライアントブラウザの時刻をUTC形式でphpスクリプトに送信します。
- [PHP]クライアントブラウザ時間-7時間(UTC?)=javascriptを使用するために作成された通知の実際の時間。
- [PHP]結果をJavascriptに送り返すので、クライアントブラウザ側で2時間前になる可能性があります。
どうすればよいですか?
情報のためだけに、UTC形式は次のようになります(1000を掛けたもの):1314952284779