多个小时的数字

时间:2013-12-03 11:09:22

标签: php

我有类似的东西,例如:01:06:22这代表1小时,6分钟和22秒。我想接受它,并将它加倍6并将其添加到其他时间,例如04:23,即凌晨4点和23分钟不是4小时和23分钟

基本上,我希望:

01:06:22 * 6 = 6小时38分钟取消剩余秒数,在这种情况下为12

现在,我想接受它并将其附加到其他小时,04:23在这种情况下,结果将是: 11:01

不幸的是,我不知道如何开始和做。

任何帮助都是适当的!

澄清

我必须按6倍的时间 从不 超过2小时。

所有时间都采用相同的格式。

5 个答案:

答案 0 :(得分:1)

使用DateTime很简单:

$time = '01:06:22';
$dateSeconds = new DateTime("1970-01-01 $time UTC");
$seconds = $dateSeconds->getTimestamp() * 6;
$interval = new DateInterval('PT'.$seconds.'S');
$date = new DateTime('1970-01-01 04:23:00 UTC');
$date->add($interval);
echo $date->format('H:i:s');

strtotimegmdate的其他解决方案。 (与Suresh相似但工作):

$date = strtotime('1970-01-01 01:06:22 UTC');
$add = strtotime('1970-01-01 04:23:00 UTC');
$date = (($date*6)+$add);
echo gmdate('H:i:s', $date);

答案 1 :(得分:1)

如果你想自己实现它,这是一个解决方案。

关于时间码的事情是,如果你做得不对,if if条件就会变得非常沉重。

我想到的最好的方法是将所有内容转换为第二种方式。

所以01:06:22会变成:

numberOfSecond = 22 + 06 * 60 + 01 * 60 * 60

如何从字符串中获取22,06等?你可以使用Regex。

您需要什么:

  • 提取不同值(小时,分钟,秒)的功能
  • 将时间码转换为第二个
  • 的功能
  • 转换回时间码的功能
  • 要增加,添加等功能......

您可能想为它创建一个类。

答案 2 :(得分:1)

您可以尝试这样:

$date = strtotime('01:06:22');
$add = strtotime('00:04:23');
$date = ($date*6)+$add;
echo date('H:i:s', $date);

注意:代码未经过测试。

答案 3 :(得分:1)

首先,您希望将时间跨度乘以一个因子。最简单的方法是将跨度转换为秒并进行直线乘法:

$date =DateTime::createFromFormat('!H:i:s', '01:06:22', new DateTimeZone('UTC'));
$seconds = $date->getTimestamp();

此代码的工作原理是假设时间是Unix纪元启动期间的一个时刻,以便它可以获得自纪元(时间戳)以来经过的秒数。该数字等于以秒为单位的时间跨度的持续时间。但是,非常重要输入被解释为UTC时间,而不是当地时区的内容。

一种等效的做事方式(只要输入格式正确),技术含量较低,但可能不太容易出错:

list($h, $m, $s) = explode(':', '01:06:22');
$seconds = $h * 3600 + $m * 60 + $s;

现在乘法:

$seconds = $seconds * 6;

如果您希望在此阶段只保留完整的分钟数:

$seconds = $seconds - $seconds % 60;

将结果添加到给定“时间”的最后一步尚未明确指定 - 参考时间是否包含日期信息?如果加入它会超过24小时会发生什么?

答案 4 :(得分:1)

自我解释:

$initialTime = '01:06:22';

$timeToAdd = '04:23';

$initialTimeExploded = explode( ':' ,$initialTime );

$initialTimeInMintues = ( $initialTimeExploded[0] * 60 ) + $initialTimeExploded[1];

$initialTimeInMintuesMultipliedBySix = $initialTimeInMintues * 6;

$timeToAddExploded = explode( ':' ,$timeToAdd );

$timeToAddExplodedInMintues = ( $timeToAddExploded[0] * 60 ) + $timeToAddExploded[1];

$newTimeInMinutes = $initialTimeInMintuesMultipliedBySix + $timeToAddExplodedInMintues;

$newTime = floor( $newTimeInMinutes / 60 ) .':' .($newTimeInMinutes % 60);

echo $newTime;

结果:

10:59