1

我在 php.net 和 stackoverflow 上搜索我的问题,但我没有找到解决问题的好答案,所以我决定问它!

我有很多秒:

210

我将其转换为00:03:30

gmdate('H:i:s', 210);

但是我怎样才能格式化我的答案:3m30s 或 3min30secs?

我想我可以通过 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;

谁能帮我?谢谢。

4

7 回答 7

2
echo ltrim(date("H", 210), "0")." hours, ".
     ltrim(date('i', 210), "0")." min, ".
     ltrim(date('s', 210), "0")." secs";
于 2013-06-10T16:05:40.487 回答
1

date()有点像printf(). 您传递一个格式字符串,其中包含一组定义的元字符,这些元字符将被值替换。请注意,格式字符串可以包含任何内容,而不仅仅是元字符。手册页也解释了这一点。您可以使用:

date('i\ms', 210);

您看到您必须将文字 (the 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()

于 2013-06-10T16:00:23.313 回答
1

您可以在 gmdate 中格式化字符串,只需转义要打印的字符:

$sec = 210;
echo gmdate("i\m s\s", $sec);

输出:

03m 30s
于 2013-06-10T16:06:10.550 回答
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);

这是我能想到的最好方法。

于 2013-06-10T16:08:39.187 回答
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';
于 2013-06-10T16:11:36.453 回答
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
于 2013-06-10T16:28:50.207 回答
0
echo ltrim(date("H", 210), "0")." hours, ".
     ltrim(date('i', 210), "0")." min, ".
     ltrim(date('s', 210), "0")." secs";

感谢橙丸!

于 2013-06-10T16:41:10.090 回答