您要執行的邏輯是不可能的。在不知道用戶的實際時區的情況下,您無法瞭解當地時間「昨天早上8點」的UTC等值。夏令時轉換可能使昨天的偏移量不同於今天的偏移量。請參閱time zone tag wiki,特別是時區!=偏移部分以獲取更多信息。
如果您確實知道用戶的時區,那麼您可以使用Moment.js的moment timezone附加庫執行此計算。該代碼將如下所示:
moment().tz('America/Los_Angeles').subtract(1, 'day')
.set({hours:8, minutes:0, seconds:0, milliseconds:0}).utc()
打破這種下來,它是有道理的,我們正在做以下的事情:
moment() //get the current time
.tz('America/Los_Angeles') //put the moment in the Los Angeles time zone
//the Los Angeles time zone is one of several that are UTC-7 right now
.subtract(1, 'day') //go to yesterday
.set({hours:8, minutes:0, seconds:0, milliseconds:0}) //set the time to exactly 8 am
.utc() //convert back to UTC
不要加8小時,一天的開始。如果當天時鐘「前進」,那麼上午9點,如果他們「倒退」,則上午7點。
聽起來好像您的代碼正在服務器上的節點中運行。如果在瀏覽器中運行,瀏覽器知道用戶的時區規則,你可以使用下面的代碼昨天上午8點,以獲得時間:
moment().subtract(1, 'day').set({hours:8, minutes:0, seconds:0, milliseconds:0}).utc()
此代碼不需要時刻時區加因爲瀏覽器知道用戶當地時間的時區規則。
如果您需要獲取用戶的時區,則有幾個選項。最可靠的是使用內置在地圖中的時區選取器來讓用戶選擇。有一些在互聯網上浮動。
如果你不想這樣做,你可以使用moment.tz.guess()
函數讓時間區域使用一些啓發式方法對用戶的時區進行有根據的猜測。這個功能很好,但由於瀏覽器的限制,不可能使其100%準確。
有關處理JavaScript中的日期和時間以及時區的大量信息,您可以在幾個月前試用this talk I did at JavaScript MN。您可能會喜歡this really excellent Pluralsight course by Matt Johnson。
我認爲這應該是一個算術問題。邏輯部分在哪裏? – Mai
邏輯部分是,我不知道它是邏輯問題還是算術問題。本地和UTC之間的計算讓我感到困惑。 – metalaureate
你可以添加一個例子嗎?如果當前UTC時間爲「2016-01-10 0800」,應該輸出什麼? – Rahul