PHP date():没有前导零的分钟

Posted

技术标签:

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

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

【问题讨论】:

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

但是,您可以通过简单地将带有前导零的日期乘以 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 希望分钟数没有前导零

以上是关于PHP date():没有前导零的分钟的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的date()函数

4)date中的Ymd格式问题

如何在没有前导零的情况下转换配置单元中的日期

php输出星期几

获取具有非前导零的数字(包括“ - ”)

从 QString 中删除前导零的最佳方法