我绝对是PHP的新手,但是我确实了解一些基本的JS和Ruby。
我有一个类似下面的数组。
[7, 13.5, 15, 16.5, 24]
每个元素都是0到24之间的数字,它表示一天中的一个时间实例。 7表示07:00:00,13.5表示13:30:00,等等。
我在寻找帮助,将上面的数组转换为下面的数组,并将24更改为23:59:59。
[07:00:00, 13:30:00, 15:00:00, 16:30:00, 23:59:59]
原始数组中的项目将始终为整数或小数点后为5。
谢谢
答案 0 :(得分:1)
单行解决方案,使用 gmdate 功能并使其简单。例如https://implode.io/brPerL
$ time = [7,13.5,15,16.5,24];
$out = [];
foreach($time as $item){
if($item == 24){
$out [] = '23:59:59';
}else{
$out [] = gmdate('H:i:s', floor($item * 3600));
}
}
var_dump($out);
array(5) {
[0]=>
string(8) "07:00:00"
[1]=>
string(8) "13:30:00"
[2]=>
string(8) "15:00:00"
[3]=>
string(8) "16:30:00"
[4]=>
string(8) "23:59:59"
}
答案 1 :(得分:1)
代码使用sprintf
函数来格式化时间。
<?php
$timeArr = [7, 13.5, 15, 16.5, 24];
echo '<pre>';
$timeArr = array_map('convertNumberToTime', $timeArr);
var_dump($timeArr);
function convertNumberToTime($time)
{
if($time == 24){
$hours = 23;
$minutes = 59;
$seconds = 59;
} else {
$hours = floor($time);
$minutes = ($time-$hours) * 60;
$seconds = 0;
}
$timeString = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds);
return $timeString;
}
答案 2 :(得分:0)
使用strtotime
,但受hour
和minute
的限制
<?php
$arr = [7, 13.5, 15, 16.5, 24];
$timeArr = [];
foreach($arr as $k=>$v){
if($v > 23.5){
$v = "23.59.59";
}else{
$v = (int)$v + (($v - (int)$v)*6)/10;
$v = number_format($v,2);
}
echo date("H:i:s",strtotime($v))."\n";
}
?>
输出:
07:00:00
13:30:00
15:00:00
16:30:00
23:59:59
答案 3 :(得分:0)
<?php
$data=array(7, 13.5, 15, 16.5, 24);
$timestamp=array();
foreach ($data as $value) {
$MM="00";
$HH=$value;
if(is_float($value)){
$HH=substr($value, 0, -2);
$MM="30";
}
if($HH<10)
$HH="0".$HH;
$TIME=$HH.":".$MM.":00";
if($HH==24)
$TIME="23:59:59";
array_push($timestamp,$TIME);
}
var_dump($timestamp);
?>
输出:
array(5) {
[0]=>
string(8) "07:00:00"
[1]=>
string(8) "13:30:00"
[2]=>
string(8) "15:00:00"
[3]=>
string(8) "16:30:00"
[4]=>
string(8) "23:59:59"
}