Perl相当于PHP的strtotime()?

时间:2012-12-03 18:44:53

标签: perl date date-parsing

我意识到Perl有strftime,它允许你传递一个格式化对象。我想知道我能找到的功能更像是以下(来自PHP):

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

这样做的原因是业务需求,其中需要比较用户提供的日期以进行验证和扩展逻辑(此日期是否也属于另一个日期范围,等等)。现在,我意识到我可以编写一个专门用于执行此操作的完整库,并且我意识到日期解析存在任何潜在的陷阱,您永远不应该信任用户输入,但这里有一些基本的假设。

  1. 输入实际上是从符合其内部日期格式规范的任何数量的软件包中输出的。它们都遵循一些标准,但这些标准在程序之间没有统一规范化。话虽如此,我应该总是比较同一个程序中的两个日期,但我可能永远不知道它们可能遵循的格式。
  2. 我意识到任何给定系统的标准可能会有所不同,但这里的假设是我们将所有日期都提供给同一个东西,所以我们可以相信一致的实现,希望CPAN或其他的东西轻松更新模块。

3 个答案:

答案 0 :(得分:12)

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 :(得分:5)

Perl中日期/时间操作的标准是DateTime项目。

https://metacpan.org/pod/DateTime

答案 2 :(得分:1)

Perl的

strptime可以在核心模块Time::Piece中获得。这提供了核心模块解决方案,而不幸的是,富DateTime模块不是核心Perl的一部分。