4

我有一个关于date_parse_from_format()方法的问题:

$parsed = date_parse_from_format("Y d M H:i T", '2012 28 Nov 21:00 CET');

返回具有给定日期详细信息的关联数组。

这将返回一个包含一些日期信息的数组。但是有什么方法可以将其转换为 unix 时间戳?

4

4 回答 4

7

约翰,

下面是一个如何在您的场景中实施 mktime 的确切示例:

$parsed = date_parse_from_format("Y d M H:i T", '2012 28 Nov 21:00 CET');
$new = mktime(
        $parsed['hour'], 
        $parsed['minute'], 
        $parsed['second'], 
        $parsed['month'], 
        $parsed['day'], 
        $parsed['year']
);
echo $new; //returns: 1354136400

为了将来参考,您可以使用var_dump()print_r()在数组上查看如何访问嵌套值。

$parsed 的 var_dump

array (size=16)
  'year' => int 2012
  'month' => int 11
  'day' => int 28
  'hour' => int 21
  'minute' => int 0
  'second' => int 0
  'fraction' => boolean false
  'warning_count' => int 0
  'warnings' => 
    array (size=0)
      empty
  'error_count' => int 0
  'errors' => 
    array (size=0)
      empty
  'is_localtime' => boolean true
  'zone_type' => int 2
  'zone' => int -60
  'is_dst' => boolean false
  'tz_abbr' => string 'CET' (length=3)
于 2012-11-29T12:45:52.647 回答
4

您可以通过尝试使用mktime()作为日期来获取 UNIX 时间戳。

例如:

echo mktime(12, 20, 0, 10, 4, 2012 );

你会得到这样的输出1349353200

如果您想要上午/下午,只需在下午添加 12 小时。

例如:

mktime($isAM ? $hrs : ($hrs + 12), $mins, $secs, $m, $d, $y);

你也可以使用 strtotime():

strtotime() - 将任何英文文本日期时间描述解析为 Unix 时间戳

echo strtotime("2012-11-03 11:24:00PM");

你会得到这样的输出1351985040

于 2012-11-29T12:39:34.170 回答
2

在 PHP >=5.3 中,您可以使用 DateTime 构造函数,其功能与date_parse_from_format. 加分项:它是单行的。

例如,要将 UK 格式的日期转换为 UNIX 时间戳,我们可以这样做:

DateTime::createFromFormat("d/m/Y, H:i", '27/03/2020, 22:00')->getTimestamp()

-> int(1585346400)
于 2020-01-22T10:12:12.323 回答
0

mktime() 应该完全满足您的需求 :) 查看http://php.net/manual/en/function.mktime.php以了解如何使用它!

于 2012-11-29T12:38:23.620 回答