2017-08-05 36 views
-3

我有一個普遍的問題,但目前我無法做到。我在一個項目上工作。我們的數據庫基於歐洲/阿姆斯特丹時間。但客戶時區和日期每次都在變化。你知道我在說' 我從PHP數據庫中得到日期(CakePHP)。而我只是想把這些日期寫成「2分鐘前」。我們在數據庫上保留這樣的日期「2017-08-04 13:43:38」我可以用它來解決其他問題或功能。 我用timeago.js如何平衡客戶端(JavaScript)和服務器之間的時區(PHP)

我的問題

我改變通過界面的任何記錄現在。 (2017-08-04 13:43:38)(伊斯坦布爾時區)系統保存2017-08-04 12:43:38(阿姆斯特丹時區)作爲修改日期。這就是爲什麼我的JavaScript總是顯示大約一小時前它應該是小於分鐘前我想將每個客戶端時區更改爲阿姆斯特丹時區。

我的問題:

  1. 我應該在哪裏做呢? (客戶端或服務器)
  2. 我tryna在客戶端工作。如何通過JavaScript簡化時區?
+0

你需要澄清你的問題。如果你在像「2017-08-04 13:43:38」這樣的字符串上使用內置的解析器,它可能會(但不是肯定)被視爲本地,所以表示主機時區設置不同的時間點。最好以UTC保存日期並手動解析(一個庫可以提供幫助)。不惜一切代價避免內置解析器,請參閱[*爲什麼Date.parse提供不正確的結果?](https://stackoverflow.com/questions/2587345/why-does-date-parse-give-incorrect-results ) – RobG

+0

@RobG對不起。你是對的。我剛剛編輯了我的問題內容。 –

回答

0

我應該在哪裏做? (客戶端或服務器)

在服務器上,因爲它有一個主機環境,其功能和時鐘精度可以讓您信心十足。

我tryna在客戶端工作。如何通過JavaScript簡化時區?

如果你打算做客戶端,你需要提供一個字符串,在客戶端可靠地解析幷包含時區。您可以使用ISO 8601格式字符串,並希望客戶端正確解析它,或者手動解析字符串並確定(庫可以幫助但不是強制性的)。

目前阿姆斯特丹是UTC + 0200,因此您應該發送一個字符串,如「2017-08-04T13:43:38 + 0200」或「2017-08-04T11:43:38Z」,並希望客戶端時鐘精確。

如果你使用一個庫像moment.js你可以用它來解析字符串,並使用fromNow像得到一個「友好」的格式:

// Using date for Amsterdam 
 
var d = moment("2017-08-05T13:43:38+0200"); 
 
console.log(d.format('D MMM YYYY [at] hh:mm A [local]') + ' was ' + d.fromNow() + '.'); 
 

 
// Equivalent UTC 
 
var d = moment("2017-08-05T11:43:38Z"); 
 
console.log(d.format('D MMM YYYY [at] hh:mm A [local]') + ' was ' + d.fromNow() + '.');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

小心友好格式,有些人真的不喜歡它們。當今天是星期二時,看到「5天前」和「上週」,讓我想知道哪一個在另一個之前。

0

如果您想精確讀取時間,您可以使用互聯網時間服務器來保證時間跨越您的平臺以毫秒粒度進行同步。一些公衆可以在這裏找到http://tf.nist.gov/tf-cgi/servers.cgi。我會使用該客戶端查找時間,然後將其發送到服務器。我相信這些服務器將在ISO8601中服務。

相關問題