【问题标题】:PHP strftime returns falsePHP strftime 返回 false
【发布时间】:2012-08-27 03:26:19
【问题描述】:

我是strftime("%e %B %Y", 1344557429)

它返回false,但它应该根据http://php.net/manual/en/function.strftime.php"10 August 2012"这种格式返回一个日期

任何想法可能是问题所在?

【问题讨论】:

  • "由于输出依赖于底层 C 库,因此不支持某些转换说明符。在 Windows 上,提供未知的转换说明符将导致 5 条 E_WARNING 消息并返回 FALSE 。”也来自您指向的文档

标签: php strftime


【解决方案1】:

先阅读说明书:

找到巨大的红框:

仅限 Windows:Windows 不支持 %e 修饰符 实现这个函数。要实现这个值,%#d 可以改用修饰符。下面的例子说明了如何 写一个跨平台兼容的函数。

虽然编写新代码是一种常见做法,但将 error_reporting 设置为 E_ALL 以便您可以轻松找到错误。

【讨论】:

    【解决方案2】:

    啊,找到了解决方案,感谢@Peter Szymkowski。我瞎了

    <?php
    
    // Jan 1: results in: '%e%1%' (%%, e, %%, %e, %%)
    $format = '%%e%%%e%%';
    
    // Check for Windows to find and replace the %e 
    // modifier correctly
    if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
        $format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format);
    }
    
    echo strftime($format);
    ?>
    

    【讨论】:

      【解决方案3】:

      对于单个日期使用:

      $format = '%B '.((strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') ? '%#d' : '%e').', %Y';
      $date = strftime($format, $unix_timestamp);
      

      PHP docs 解决方案作为一个函数很好:

      function fixed_strftime($format, $unix_timestamp) {
          if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') {
              $format = preg_replace('#(?<!%)((?:%%)*)%e#', '\1%#d', $format);
          }
          return strftime($format, $unix_timestamp);
      }
      

      来源:http://codeitdown.com/php-strftime-e-on-windows/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-30
        • 2018-10-30
        • 2011-09-10
        • 2013-01-25
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多