PHP:将日期字符串转换为Unix时间戳

PHP:将日期字符串转换为Unix时间戳,php,Php,给定以下字符串: 2011年1月1日 2011年1月1日 2011年1月1日 2011年1月1日 1-1-2011 等 如何将它们转换为Unix时间戳。请注意,在大多数情况下,这将采用带有各种分隔符的dd-mm-yyyy格式 看看,或者是这门课 strotime示例: $timestamp = strtotime('1/1/2011'); if ( preg_match('/^(?P<day>\d+)[-\/](?P<month>\d+)[-\/](?P<ye

给定以下字符串:

  • 2011年1月1日
  • 2011年1月1日
  • 2011年1月1日
  • 2011年1月1日
  • 1-1-2011
如何将它们转换为Unix时间戳。请注意,在大多数情况下,这将采用带有各种分隔符的
dd-mm-yyyy
格式

看看,或者是这门课

strotime
示例:

$timestamp = strtotime('1/1/2011');
if ( preg_match('/^(?P<day>\d+)[-\/](?P<month>\d+)[-\/](?P<year>\d+)$/', '1/1/2011', $matches) )
{
  $timestamp = mktime(0, 0, 0, ( $matches['month'] - 1 ), $matches['day'], $matches['year']);
}
每个函数都有它的警告。例如,
strotime
的文档说明:

m/d/y或d-m-y格式的日期 通过查看 各部件之间的分离器 组件:如果分隔符是一个 斜杠(/),那么美国的m/d/y是 假定;而如果分隔符是 破折号(-)或点(.),然后 假设采用欧洲d-m-y格式

您还可以使用捕获所有3个部分,并使用创建自己的时间戳

preg\u match
示例:

$timestamp = strtotime('1/1/2011');
if ( preg_match('/^(?P<day>\d+)[-\/](?P<month>\d+)[-\/](?P<year>\d+)$/', '1/1/2011', $matches) )
{
  $timestamp = mktime(0, 0, 0, ( $matches['month'] - 1 ), $matches['day'], $matches['year']);
}
if(预匹配('/^(?P\d+[-\/](?P\d+[-\/](?P\d+)$/','1/1/2011',$matches))
{
$timestamp=mktime(0,0,0,($matches['month']-1)、$matches['day']、$matches['year']);
}

您可能正在寻找


不过,作为警告,它会将每个可能的字符串格式转换为unix时间戳(epoch),因为很难明确地解析每个字符串到日期时间。

您的正则表达式采用dd-mm-yyyy格式,我不确定它是否是。@StackOverflowNewbie-您的问题是:“请注意,在大多数情况下,这将是dd-mm-yyyy格式,带有各种分隔符。”因此,我使用了该格式,但您可以将
elseif
语句添加到原始语句中,以检查不同的格式,并使
regex
更加具体(即,不要使用描述月为0-12,天为0-31的模式来代替\d+)。当然,在1/2/13的情况下,除非您知道格式,否则无法区分哪个是哪个。
$to='23.1.2014-18:16:35'
list($part1,$part2) = explode('-', $to);
list($day, $month, $year) = explode('.', $part1);
list($hours, $minutes,$seconds) = explode(':', $part2);
$timeto =  mktime($hours, $minutes, $seconds, $month, $day, $year);
echo $timeto;