【问题标题】:PHP date(): minutes without leading zerosPHP date():没有前导零的分钟
【发布时间】:2011-06-06 01:25:48
【问题描述】:

我想知道是否有 PHP 的 date() 的格式字母允许我打印分钟没有前导零,或者我是否必须手动测试并删除前导零?

【问题讨论】:

  • 我可以问为什么没有零分钟吗???
  • 是的,请问..我也想听到这个答案...
  • 一个原因:如果将例如 date("Y,n,j,G,i,s", xxx) 的结果输出到 javascript,它会在 08 上对八进制数抛出警告& 09 分和秒。虽然这可以通过传递引用来解决: date("'Y','n','j','G','i','09'", xxx)
  • 在下面查看我的答案...abs( date( 'i' ) ) 没有与intval() 相同的问题

标签: php date format


【解决方案1】:

用途:

$minutes = intval(date('i'));

【讨论】:

  • 疯狂的 PHP 行为!它将 int 09 视为八进制数,因为前导零 - 由于 9 不是有效的八进制数,它将评估为 0。但它将字符串09 视为十进制整数9。再见预期的行为! :)
  • 最好使用(int)date('i'); 而不是intval()。它应该更快。
  • 好吧,根据文档,这是预期的行为,因为 intval 的第二个参数是 base,默认情况下它等于 10。如果明确定义了基数,PHP 将处理输入一个八进制数如08
  • @hek2mgl 在下面看到我的答案...abs( date( 'i' ) ) 没有与intval() 相同的问题
  • echo +'05'; 导致打印值 5。所以+$date->format("your-format") 将返回一个整数:)
【解决方案2】:

对于信息多于几分钟的时间:

ltrim() - 从字符串的开头去除空格(或其他字符)

ltrim(date('i:s'), 0);

返回:

8:24

【讨论】:

  • 这在不到 1 分钟的时间内不起作用.. 例如:00:24 将导致 :24
  • 完全适合我的功能 (..elseif ($duration <= 3599 && $duration > 59) {..)
  • 这是一个很好的解决方案,但只是一个不好的例子,它应该只是ltrim(date('i'), 0)ltrim(date('s'), 0)分开:)
【解决方案3】:

根据PHP Documentationdate() 函数没有没有前导零的分钟占位符。

但是,您可以通过简单地将带有前导零的日期乘以 1 将其转换为整数来获取该信息。

$minutesWithoutZero = 1* date( 'i' );

【讨论】:

  • 是的。只是使用我在 JavaScript 时代养成的坏习惯。
  • +1 用于新颖的解决方案 Lucanos。谢谢。我选择了Hippo 的答案,因为它简单且不失人性;-P
【解决方案4】:

我也试图找到它几秒钟,放弃了搜索,只是将结果转换为这样的 int:

echo (int)date("s");

这将以快速有效的方式消除前导零。

【讨论】:

    【解决方案5】:

    看起来不像,但你可以做类似...

    echo date('g:') . ltrim(date('i'), '0');
    

    或者,您可以使用(int) 将第二个调用转换为date()

    【讨论】:

    • 太棒了!我很高兴它是如此简单。谢谢。
    【解决方案6】:

    这也有效

    $timestamp = time(); // Or Your timestamp. Skip passing $timestamp if you want current time
    echo (int)date('i',$timestamp);
    

    【讨论】:

    • 那里不需要添加time()
    • @alex,我实际上是想展示他可以在哪里添加自己的时间戳
    • alex 是对的...date( 'format_string' ) 假定 time() 作为第二个参数
    【解决方案7】:

    如果我需要 XXmXXs 格式,我会使用这种格式:

    //Trim leading 0's and the 'm' if no minutes
    ltrim(ltrim(gmdate("i\ms\s", $seconds), '0'), 'm');
    

    这将输出以下内容:

    12m34s
    1m23s
    12s
    

    【讨论】:

    • 太棒了!甚至比@ScottA 解决方案更好。这是我的代码(也有几个小时)print ltrim(gmdate("H\hi\ms\s", $duration), '0mh');
    【解决方案8】:

    我只是做了这一行解决方案

    $min = intval(date('i',strtotime($date)));

    使用 ltrim 方法可能会删除所有前导零。例如,如果 '00' min。在这种情况下,这将删除所有零并为您提供空结果。

    【讨论】:

      【解决方案9】:

      我的解决方案:

      function seconds2string($seconds) {
              if ($seconds == 0) {
                  return '-';
              }
              if ($seconds < 60) {
                  return date('0:s', $seconds);
              }
              if ($seconds < 3600) {
                  return ltrim(date('i:s', $seconds), 0);
              }
              return date('G:i:s', $seconds);
      }
      

      这将输出:

      0 seconds:            -
      10 seconds:        0:10
      90 seconds:        1:30
      301 seconds:       5:01
      1804 seconds:     30:04
      3601 seconds:   1:00:01
      

      【讨论】:

        【解决方案10】:

        或者在 mySQL 中只需将其乘以 1,如下所示:

        select f1, ..., date_format( fldTime , '%i' ) * 1  as myTime, ..., ...
        

        【讨论】:

        • 我没有要求 MySQL 解决方案,但感谢您提供替代方案 - 对于 MySQL 相关格式,我会记住这一点。
        【解决方案11】:
        $current_date = Date("n-j-Y");
        echo $current_date;
        
        // Result m-d-yy
        
        9-10-2012
        

        【讨论】:

          【解决方案12】:

          我的速成。告诉我你的想法:

          <?php function _wo_leading_zero($n) {
              if(!isset($n[1])) return $n;
          
              if(strpos($n, '.') !== false) {
              $np = explode('.', $n); $nd = '.';
              }
              if(strpos($n, ',') !== false) {
              if(isset($np)) return false;
              $np = explode(',', $n); $nd = ',';
              }
              if(isset($np) && count($np) > 2) return false;
              $n = isset($np) ? $np[0] : $n;      
          
              $nn = ltrim($n, '0');
              if($nn == '') $nn = '0';
              return $nn.(isset($nd) ? $nd : '').(isset($np[1]) ? $np[1] : '');
          }
          
          echo '0 => '._wo_leading_zero('0').'<br/>'; // returns 0
          echo '00 => '._wo_leading_zero('00').'<br/>'; // returns 0
          echo '05 => '._wo_leading_zero('05').'<br/>'; // returns 5
          echo '0009 => '._wo_leading_zero('0009').'<br/>'; //returns 9
          echo '01 => '._wo_leading_zero('01').'<br/>'; //returns 1
          echo '0000005567 => '._wo_leading_zero('0000005567').'<br/>'; //returns 5567
          echo '000.5345453 => '._wo_leading_zero('000.5345453').'<br/>'; //returns 0.5345453
          echo '000.5345453.2434 => '._wo_leading_zero('000.5345453.2434').'<br/>'; //returns false
          echo '000.534,2434 => '._wo_leading_zero('000.534,2434').'<br/>'; //returns false
          
          echo date('m').' => '._wo_leading_zero(date('m')).'<br/>';
          echo date('s').' => '._wo_leading_zero(date('s')).'<br/>'; ?>
          

          【讨论】:

          • ~12 个函数调用来删除前导零。你的函数可以分解成这个(int) "001"
          【解决方案13】:

          就用这个吧:

          (int) date('i');
          

          【讨论】:

          • @KrzysztofJaniszewski 感谢您的回复。对不起,但我的母语不是英语,所以对我来说很难用英语解释一些事情。但是我会尝试。 (int) 函数在 PHP 中原生工作。所以它应该工作得很快。但我没有测试它。
          【解决方案14】:

          使用PHP的绝对值函数:

          abs( '09' ); // result = 9

          abs( date( 'i' ) ); // result = minutes without leading zero

          【讨论】:

            【解决方案15】:

            我的建议是阅读这个漂亮的文档,它包含 php 日期函数的所有详细信息

            Link of Documentation

            根据您的问题,您可以使用i - Minutes with leading zeros (00 to 59) 以前导零(0)返回分钟。

            并且还引入了[Intval()][2]函数返回一个变量的整数值。您不能在对象上使用 intval() 函数

            【讨论】:

            • OP 希望分钟数没有前导零
            猜你喜欢
            • 2012-12-12
            • 2022-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-02-23
            • 1970-01-01
            • 2023-04-04
            • 2011-04-19
            相关资源
            最近更新 更多