PHP date():没有前导零的分钟
Posted
技术标签:
【中文标题】PHP date():没有前导零的分钟【英文标题】:PHP date(): minutes without leading zeros 【发布时间】: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()
相同的问题
【参考方案1】:
用途:
$minutes = intval(date('i'));
【讨论】:
疯狂的 PHP 行为!它将 int09
视为八进制数,因为前导零 - 由于 9
不是有效的八进制数,它将评估为 0
。但它将字符串09
视为十进制整数9
。再见预期的行为! :)
最好使用(int)date('i');
而不是intval()
。它应该更快。
好吧,根据文档,这是预期的行为,因为 intval 的第二个参数是 base
,默认情况下它等于 10。如果明确定义了基数,PHP 将处理输入一个八进制数如0
或8
@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():没有前导零的分钟的主要内容,如果未能解决你的问题,请参考以下文章