我在php.net和stackoverflow上搜索我的问题,我找不到解决问题的好答案,所以我决定问它!
我有几个秒:
210
我将其转换为 00:03:30 :
gmdate('H:i:s', 210);
但是我如何格式化我的答案: 3分30秒或3分30秒?
我想我可以通过Exploding我的结果和变量连接来进行这种转换,但我不知道它是否是最好的解决方案......
$part = explode(":", $mytime);
$hours = $part[0];
$mins = $part[1];
$secs = $part[2];
$hoursvar = "h";
$minsvar = "m";
$secsvar = "s";
$timefinal = $hours.$hoursvar.$mins.$minsvar.$secs.$secsvar;
任何人都可以帮助我吗?感谢。
答案 0 :(得分:2)
echo ltrim(date("H", 210), "0")." hours, ".
ltrim(date('i', 210), "0")." min, ".
ltrim(date('s', 210), "0")." secs";
答案 1 :(得分:1)
date()
有点像printf()
。传递一个格式字符串,其中包含一组已定义的元字符,这些元字符将替换为值。请注意,格式字符串可以包含任何内容,而不仅仅是元字符。 manual page explains this也是{{3}}。您可以使用:
date('i\ms', 210);
您会发现必须将文字(m
)转义为它们未被值替换。
我希望你能接受领先的零点:03m30
如果没有,请使用:
$date = date('i\ms', 210);
if(strpos($date, '0') === 0) {
$date = substr($date, -strlen($date) + 1);
}
或者,更短,谢谢@Orangepill :):
$date = ltrim(date('i\ms', 210), '0');
因为date()
已知没有前导零的分钟数没有元字符。
答案 2 :(得分:1)
您可以格式化gmdate中的字符串,只需转义要打印的字符:
$sec = 210;
echo gmdate("i\m s\s", $sec);
输出:
03m 30s
答案 3 :(得分:0)
这很简单,您当前的日期格式为 H:i:s ,并且您希望将其转换为 i:s
所以你做了以下
$date = "00:03:30";
$new_date = date("i_s-",strtotime($date));
由于我们无法在函数中插入字母m和s,我们可以使用 str_replace 将 _ 替换为 m 并替换 - s 所以
$new_date = str_replace("_","m",$new_date);
$new_date = str_replace("-","s",$new_date);
这是我能想到的最佳方式。
答案 4 :(得分:0)
$string_time = '00:03:30';
$int_time = strtotime(date('Y-m-d').' '.$string_time);
echo date('i', $int_time).'m'.date('s', $int_time).'s';
答案 5 :(得分:0)
$seconds = 210;
$date = gmdate("H\h:i\m:s\s", $seconds);
echo preg_replace('/0([0-9])/','$1', $date);
<强>输出强>
0h:3m:30s
你可以使用gmdate和preg_replace从开头删除0。
或更高级
$seconds = 210;
$date = gmdate("H\h:i\m:s\s", $seconds);
$match = array('/0([0-9])/','/s/','/m\:/','/h\:/');
$replace = array('$1', ' sec ', ' min ', ' hours ');
echo preg_replace($match,$replace, $date);
<强>输出:强>
0 hours 3 min 30 sec
答案 6 :(得分:0)
echo ltrim(date("H", 210), "0")." hours, ".
ltrim(date('i', 210), "0")." min, ".
ltrim(date('s', 210), "0")." secs";
感谢Orangepill!