3 回答

TA貢獻1811條經驗 獲得超4個贊
以這種方式構造的日期使用本地時區,使構造日期不正確。設置某個日期對象的時區是從包含時區的日期字符串構造它。(我在使用較舊的Android瀏覽器時遇到了問題。)
請注意,getTime()返回毫秒,而不是普通秒。
對于UTC / Unix時間戳,以下內容應該足夠:
Math.floor((new Date()).getTime() / 1000)
它會將當前時區偏移量計入結果。對于字符串表示,David Ellis的回答是有效的。
澄清:
new Date(Y, M, D, h, m, s)
該輸入被視為當地時間。如果傳入UTC時間,結果將有所不同。觀察(我現在在GMT +02:00,現在是07:50):
> var d1 = new Date();
> d1.toUTCString();
"Sun, 18 Mar 2012 05:50:34 GMT" // two hours less than my local time
> Math.floor(d1.getTime()/ 1000)
1332049834
> var d2 = new Date( d1.getUTCFullYear(), d1.getUTCMonth(), d1.getUTCDate(), d1.getUTCHours(), d1.getUTCMinutes(), d1.getUTCSeconds() );
> d2.toUTCString();
"Sun, 18 Mar 2012 03:50:34 GMT" // four hours less than my local time, and two hours less than the original time - because my GMT+2 input was interpreted as GMT+0!
> Math.floor(d2.getTime()/ 1000)
1332042634
另請注意,getUTCDate()不能替代getUTCDay()。這是因為getUTCDate()返回該月的某一天 ; 然而,getUTCDay()返回星期幾。

TA貢獻1836條經驗 獲得超3個贊
你也可以利用getTimezoneOffset和getTime來做到這一點,
x = new Date()var UTCseconds = (x.getTime() + x.getTimezoneOffset()*60*1000)/1000;console.log("UTCseconds", UTCseconds)

TA貢獻1799條經驗 獲得超9個贊
是的,你不需要做那么多; 假設我理解正確,你只需要這個toUTCString
方法。
var UTCstring = (new Date()).toUTCString(); console.log('UTCstring', UTCstring);
但是,請記住,您獲得的日期值取決于客戶端計算機的時鐘,而不是您的服務器。如果您需要這些日期的精確值(例如,當相對于另一個用戶的操作執行此操作或該操作時正確排序),您無論如何都不能依賴客戶端日期庫,并且您需要計算根據客戶與您聯系的時間來確定服務器端的日期。
基本上也要記住,客戶端基本上可以修改所有客戶端代碼并返回惡意值,只能保證服務器端的代碼 - 將客戶端視為可能的攻擊者。
添加回答
舉報