当前位置: 首页 > 知识库问答 >
问题:

将秒数持续时间更改为ISO 8601格式

彭开畅
2023-03-14

我如何转换

00:00:46.70

T0M46S

我尝试

$date = new DateTime($time); echo $date->format('\P\TG\Hi\M');

但它给了我这样的东西:

PT0H00M

注意我想要持续时间...不是日期!

共有2个答案

司马彦
2023-03-14

碳有解决方案

function secondsToISO8601Format(int $seconds): string
{
    return Carbon\CarbonInterval::seconds($seconds)->cascade()->spec();
}
壤驷华辉
2023-03-14

没有本机函数,但您可以使用本机对象DateTime完成:计算从午夜到您的时间的持续时间。

<?php

    $time     = new DateTime('00:00:46.70');
    $midnight = new DateTime('00:00:00.00');
    $period   = $midnight->diff($time);

    echo $period->format('T%iM%SS'); //output T0M46S

print_r($period);

这里有一个php沙盒来测试它

 类似资料:
  • 目前,当您获得youtube持续时间时,您会获得类似的内容。 下面的代码将其更改为。然而,我希望只获得SECONDS,因此将是输出。

  • 所以基本上我有一个秒数的值,我想用ISO8601格式表示。 例如: 90秒将表示为T1M30 到目前为止,我已经做了以下工作: 这样的输出是: TH0M0S90 最终构建了这个函数,该函数似乎生成了我需要的值(但它仅限于一天以下的时间: 谢啦

  • 我正在寻找一种从“ISO 8601持续时间格式”(P0DT0H0M0S)转换为小时的便捷方法。 到目前为止,我想到了这个: 如您所见,我的方法是将数字拆分并乘以24、1、1/60、1/3600以得到小时。我可以减少代码量吗? 样本数据和所需结果 输入: 'P1DT2H3M44S' (1 天 2 小时 3 分 44 秒) 期望输出: 26.062222222222222 (这是小时)

  • 我有ISO8601格式的持续时间值,我将其转换为时间值为整数秒,如下所示: ISO8601格式的持续时间值=“P1Y”。 我将该值存储在“时间-单位-秒”中。因此,当我检索的值将是在int,我想转换回ISO8601持续时间格式,所以我应该得到“P1Y”转换后回来。 有没有快速的方法可以做到这一点?或者我必须把时间的int值转换成float,然后通过某种方法把它转换成ISO8601持续时间。

  • 我从总毫秒开始,我已经将其转换为总分钟和总秒: 现在我想以MM:SS格式显示分钟和秒(如果偶尔有小时,则转换为HH:MM:SS格式)。我该怎么做呢?

  • 问题内容: 我需要将持续时间字符串解析为毫秒形式。 我希望像这样的持续时间相等,但是我什么也找不到。有人会建议为此目的使用或支持SDF吗? 我目前的计划是使用正则表达式来匹配数字并做类似的事情 然后使用TimeUnit将它们放在一起并转换为毫秒。 我想我的问题是,这似乎有点过头了,它可以轻松完成吗?出现了很多有关日期和时间戳的问题,但这也许有些不同。 问题答案: 使用a 是一种合理的方法。但是,为