2012-12-03 50 views
3

我意識到Perl有strftime,它允許你傳遞一個格式化對象。我想知道如果我能找到的功能更像是以下(從PHP):Perl的等效PHP的strtotime()?

$string1 = "Jun 6, 2012"; 
$string2 = "June 06 2012"; 
if (strtotime($string1) == strtotime($string2)) { 
    echo "BLAMMO!"; 
} 
// will echo "BLAMMO!" 

這樣做的原因是業務需要在其中用戶提供的日期,需要驗證和擴展的邏輯進行比較(這個日期是否也在另一個日期範圍內提供,等等)。現在,我意識到我可以編寫一個專門爲此做好準備的圖書館,並且我意識到日期解析有許多潛在的缺陷,您不應該信任用戶輸入,但這裏有一些基本假設。

  1. 輸入實際上是從許多軟件包輸出的,這些軟件包符合他們自己的日期格式化內部規範。他們都遵循一些標準,但這些標準並沒有統一在程序之間進行標準化。話雖如此,我應該總是比較同一個程序中的兩個日期,但我可能永遠不知道它們可能遵循的格式。
  2. 我意識到任何給定系統的標準可能會有所不同,但這裏的假設是我們將所有日期都用於同一事物,所以我們可以信任一致的實現,希望在CPAN或其他輕鬆更新模塊。

回答

11

Date::Parse耗材str2time,這樣做。

文檔列舉了一些例子,該模塊可以解析:

1995:01:24T09:08:17.1823213   ISO-8601 
1995-01-24T09:08:17.1823213 
Wed, 16 Jun 94 07:29:35 CST   Comma and day name are optional 
Thu, 13 Oct 94 10:13:13 -0700 
Wed, 9 Nov 1994 09:50:32 -0500 (EST) Text in()'s will be ignored. 
21 dec 17:05       Will be parsed in the current time zone 
21-dec 17:05 
21/dec 17:05 
21/dec/93 17:05 
1999 10:02:18 "GMT" 
16 Nov 94 22:28:20 PST 
1

strptime爲Perl可以核心模塊Time::Piece中獲得。這提供了一個核心模塊解決方案,而豐富的DateTime模塊不幸不是核心Perl的一部分。

+1

這將轉換他的數據完全相反的方向。 –

+1

@JimDavis因誤讀而致謝謝。 – JRFerguson