【问题标题】:PHP strtotime() function that accepts a format?接受格式的PHP strtotime()函数?
【发布时间】:2011-08-17 20:03:39
【问题描述】:

strtotime() 在 PHP 中效果很好,如果您可以为其提供它可以理解并可以转换的日期格式,但是例如您给它一个英国日期,它无法提供正确的 unix 时间戳。

是否有任何官方或非官方的 PHP 函数可以接受格式变量,该变量告诉函数传递日期和时间的格式是什么?

我最接近这样做的是date_parse_from_format()mktime()的混合

// Example usage of the function I'm after
//Like the date() function but in reverse
$timestamp = strtotimeformat("03/05/2011 16:33:00", "d/m/Y H:i:s");

【问题讨论】:

    标签: php datetime strtotime mktime


    【解决方案1】:

    我想你正在寻找strptime。如果需要 UNIX 时间戳,您可以使用它来解析日期,然后使用 mktime

    function strotimeformat($date, $format) {
      $d = strptime($date, $format);
      return mktime($d['tm_hour'], $d['tm_min'], $d['tm_sec'],
                    $d['tm_mon'], $d['tm_mday'], $d['tm_year']);
    }
    

    这适用于 PHP 5.1 及更高版本。

    【讨论】:

    • 不,我不是,我正在寻找将 unix 时间戳返回到值数组的东西。另外 strptime 没有在 Windows 上实现,所以不是一个理想的解决方案。
    • 好的。我已经用一个函数更新了我的答案,无论如何都要给你一个时间戳(虽然仍然不能在 Windows 上工作)。你当然可以做一些 substring+strpos 的工作(或者explode+rearrange+implode)来把它变成美国的日期。
    • 正如我的问题中提到的,我已经在使用date_parse_from_format()mktime() 的组合,就像您显示代码一样。 date_parse_from_format() 适用于所有系统,但仅适用于 PHP 5.3 >= areas strptime 适用于早期版本,但不适用于 windows。我会把这个问题留几天,看看是否有其他答案。
    • 你绝对需要一个格式参数吗?也许你可以扔掉 date_parse_from_format() 并使用 sscanf() 代替?这将为您在大多数平台上提供支持。
    【解决方案2】:

    strtotime 在使用 / 作为分隔符时假定它是美国日期/时间。要让它认为这是欧元日期/时间,请使用 -. 作为日期分隔符。您可以使用简单的str_replace()/s 更改为-s 或.s

    【讨论】:

    • 阅读问题...我很清楚 strtotime 的能力以及如何解决。但这不是我要问的……我要的是一个函数,它接受任何格式的日期以及一个字符串,该字符串表示该日期的格式并返回一个 unix 时间戳。
    【解决方案3】:

    如果你有 PHP 5.3:

    $date = DateTime::createFromFormat('d/m/Y H:i:s', '03/05/2011 16:33:00');
    echo $date->getTimestamp();
    

    【讨论】:

    • 我希望返回一个 unix 时间戳,而不是另一种字符串格式的日期。
    • @Andrew - meze 改变了他原来没有 getTimestamp() 的答案;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    相关资源
    最近更新 更多