2011-11-22 72 views
3

我刮一個站​​點,日期有兩種形式:如何將這些字符串解析爲UTC日期?

11-22-2011 07:41 AM 
Today @ 07:41 AM 

這兩者都是GMT-8。我希望得到一個unix時間戳,以便我可以構建一個有意義的日期對象

任何想法這可能是什麼時區?大約一個月前,該網站被格林尼治標準時間9次。 JavaScript可以自動處理夏令時?

我很難解析它們。部分問題在於時區。

目前,我使用Date.js' parseExact

date = Date.parseExact(date + ' PDT', 'MM-dd-yyyy H:mm tt zzz'); 

Hovever,這似乎得到解析12AM爲12:00,不0:00。另外,關於如何處理從today @開始的問題,我一直處於完全喪失狀態。

+0

「上午12點」 是不明確;見http://en.wikipedia.org/wiki/Midnight – geoffspear

+0

@Wooble:我意識到。但是,當我收到上午12點時,我知道它應該在同一天早上被解釋爲'0:00' – Eric

+1

我不認爲這個問題值得反對。這是一個完全合理的問題。 – LuxuryMode

回答

0

爲什麼不直接添加HHHH:mm zzz即可獲得12:00?

+0

HHHH做了什麼? – Eric

0

小時使用小寫字母h得到1-12。大寫H給出0-23。從你的例子,我會用的

MM-dd-yyyy hh:mm tt 

Documentation

你應該處理的格式「今天@」分開。當您找到該字符串時,請期待下一個令牌爲hh:mm tt形式的時間。將第二部分解析爲時間,並將其與今天(當地)的日期結合起來。用Date.js函數編程並不難,但是您不會找到捕獲「Today @」部分的單個格式字符串(如您所知)。

+0

哎呦。我複製了錯誤的代碼行。我的意思是小寫字母h – Eric

+0

問題是我今天不想要「本地」 - 我今天想要「遠程」。 – Eric

1

當我嘗試使用交互式分析器http://www.datejs.com/的兩個示例時,我會得到預期的結果。

有問題的時區可能是「美國西海岸」,又名「太平洋時間」。

不幸的是,這意味着在一年的不同時間不同的事情。在春夏兩季,時區被稱爲「PDT」(GMT-0700),其餘時間被稱爲「PST」(GMT-0800)。

使事情變得更加複雜的是,這些變化的日期與其他區域(例如歐洲)變化的日期不同。

我不認爲有一種方法可以爲Date.js指定一個時區值,並可以自動考慮這個值。

+0

'今天@'不能在邊界附近工作。今天被忽略,所以它被錯誤地解析爲「今天你在7:41 PST」,而不是「它在PST時區的那一天7:41」。因此,它可能會結束一天。 – Eric

+0

@Eric啊是的,好點。 – Alnitak

1

你可以編寫自己的時區感知日期解析邏輯,它考慮到遠程服務器的時區。

僞代碼:

if date starts with "Today @" 
    replace "Today @" with currentDateInRemoteTimezone in date 
endif 

parse_timezone-aware(date) 
+0

我不知道如何獲得'currentDateInRemoteTimezone' – Eric

+0

你將不得不找出服務器在哪個時區工作,並定義在解析時該時區與UTC有何不同。我沒有說這很容易。對不起:) – Till

+1

你看過https://github.com/mde/timezone-js嗎?我沒有時間檢查自己,但描述看起來可以派上用場。 – Till

相關問題