【发布时间】:2023-03-26 06:18:02
【问题描述】:
所以基本上我有一个我想以 ISO8601 格式表示的秒数。
例如:
90 秒将表示为 T1M30S
到目前为止,我已经完成了以下工作:
$length = 90;
$interval = DateInterval::createFromDateString($length . ' seconds');
echo($interval->format('TH%hM%iS%s'));
这个的输出是:
TH0M0S90
最终构建了这个似乎可以生成我需要的值的函数(但它仅限于少于一天的持续时间:
public function DurationISO8601(){
$lengthInSeconds = $this->Length;
$formattedTime = 'T';
$units = array(
'H' => 3600,
'M' => 60,
'S' => 1
);
foreach($units as $key => $unit){
if($lengthInSeconds >= $unit){
$value = floor($lengthInSeconds / $unit);
$lengthInSeconds -= $value * $unit;
$formattedTime .= $value . $key;
}
}
return $formattedTime;
}
谢谢
【问题讨论】:
-
那么你的问题是什么?在你说“我该怎么做?”之前,请记住,这样的问题太宽泛了,因此会被封闭。因此,如果您迄今为止编写过任何代码,我强烈建议您将其添加到您的问题中。您应该阅读“how do I ask a good question?”。
-
你可以通过除以 60 得到分钟数,然后将结果取底,你可以使用
%运算符得到秒数,你可以通过一些字符串操作将它放在一起...... -
更新问题...@deceze 如果你有超过 60 分钟的时间怎么办?
-
嗯我有这个功能,但我不能发布答案
-
在我看来这个问题是合法的。那只是“如何将时间戳转换为 ISO8601 持续时间”。维基百科上的规格信息:en.wikipedia.org/wiki/ISO_8601#Durations