2013-04-10 80 views
0

我需要獲得00:00:00 AM GMT(上午12點)當天的值,然後將其轉換爲unix時間。我怎麼會/應該去做這個在JavaScript中?有沒有外部的數據源,然後服務器時間更可靠?我將在服務器的節點上執行此操作。如何將當前時間轉換爲GMT?

謝謝!

編輯:這就是我所做的。你看到這個問題嗎?再次感謝!

date = new Date() 
start_date = Date.UTC(date.getFullYear(),date.getUTCMonth(),date.getUTCDate())/1000 
+0

那個時候是混亂的,你的意思是午夜(12AM)或中午(12PM)? – SpacedMonkey 2013-04-10 13:15:44

+0

@SpacedMonkey 12AM,所以GMT當天的開始時間。 – boom 2013-04-10 13:16:29

+0

所以你的意思是0AM:P – 2013-04-10 13:17:29

回答

2

你的方法是正確的,但你有一個討厭的bug,你在本地年份與UTC日期和月份,在新年的幾個小時,取決於時區,本地和UTC年是幾個小時不同的,所以如果你使用錯誤的一年,你的結果將是整整一年。

對你的問題有兩種解釋。要麼根據當地時間獲得結果,因此在任何給定時間的結果將取決於時區。或者您希望基於UTC時間的結果與時區相同,但有時對於某些用戶,結果不會是當地日期。

當地時間:

date = new Date() 
start_date = Date.UTC(date.getFullYear(),date.getMonth(),date.getDate())/1000 

UTC:

date = new Date() 
start_date = Date.UTC(date.getUTCFullYear(),date.getUTCMonth(),date.getUTCDate())/1000 
+0

啊!是的,我不知道'getUTCFullYear()'存在。這就是我正在尋找的。謝謝! – boom 2013-04-11 04:10:11

0

這些鏈接有一些很好的答案。我愛epochconverter.com它爲我節省了許多小時的挫折。答案的本質是使用JavaScript Date對象來處理日期轉換的所有問題。這通常是你應該用任何語言做的。如果你正在用手進行日期操作,你會得到錯誤的

http://www.epochconverter.com/programming/#javascript

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

+0

w3schools可能是錯誤的 - http://w3fools.com/。相反,看看MDN - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date – SpacedMonkey 2013-04-10 13:50:32

+0

@SpacedMonkey任何地方都可能是錯的,但我同意MDN是更好的參考。更新後。 – Jazzepi 2013-04-10 13:56:28

+0

看看我編輯的解決方案即將與 – boom 2013-04-10 14:21:40

0

這是一個良好的開端:

var now = new Date(); 
var then = new Date(now.getFullYear(), now.getMonth(), now.getDate()); 
var epoch = then.getTime(); 

不知道你想幹什麼約DST,所以你需要看看: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset

編輯:允許不同的時區:

var off = now.getTimezoneOffset() * 60000; /* tz is in mins so multiply to ms */ 
var midnight = new Date(then.getTime() - off); 
var epoch = midnight.getTime(); 
+1

這是一個好的開始,但將導致在我的時區一天的開始unix郵票。 – boom 2013-04-10 13:31:02

+0

有一種叫做Date.UTC(yyyy,mm,dd)的方法,但我首先需要知道UTC中的當前日期。 – boom 2013-04-10 13:31:51

+0

檢查我的編輯,我添加了我要去的解決方案,直到我找到一個陷阱。 – boom 2013-04-10 14:20:57

-1

這就是我最終爲其他人看這個問題所做的。

date = new Date() 
start_date = Date.UTC(date.getFullYear(),date.getUTCMonth(),date.getUTCDate())/1000 

請讓我知道,如果你看到任何理由,這將無法正常工作。

+0

查看我的答案,將UTC和非UTC方法混合仍然是錯誤的,它將在新年前的幾個小時內關閉一年。 – aaaaaaaaaaaa 2013-09-12 15:50:10