约会超过24小时?

时间:2014-11-11 12:36:40

标签: php date strtotime

我正在处理项目(Google Transit供稿),我需要按以下常见格式提供公交路线上每个站点的时间:21:00:00等等。

问题是,如果某个行程的时间持续超过午夜,他们会要求它继续计算相应的小时数。他们非常具体地说明02:00:00应该变成26:00:00和03:45:00应该变成27:45:00等。

我对如何使用任何date()或strtotime()函数进行显示感到困惑。

在我的特定情况下,我唯一能想到的就是函数匹配并在00:00:00到04:00:00之间替换输出中的任何字符串,因为这显然意味着(再次,对我而言) )这些是在午夜之前发生的旅行,但我觉得这不是正确的方法。

2 个答案:

答案 0 :(得分:3)

很明显,因为它只显示在页面上,你可以

首先从任何地方获取您的日期 让我们说$date = 00:00:00

$exploded_date = explode(":", $date);

这需要$date并将其放入数组中,所以

$exploded_date[0] is hh

$exploded_date[1] is mm

$exploded_date[2] is ss

然后你可以做的是使用ltrim()将前导0从00移到04 $exploded_date[0] - 这使得它在if语句之后可以比较

if($exploded_date[0] <= 4) {

    $exploded_date[0] = ltrim($exploded_date[0], "0");

    $exploded_date[0] = $exploded_date[0]+24;
}

然后你可以将数组重新拼成一个字符串

$date = implode(":", $exploded_date);

// if the hour is 00 to 04 it will come out as 24 to 28
// e.g. 24:35:30
echo $date;

尽管给你一个答案。这是一件愚蠢的事情,但这不是你的选择,所以你去吧:)。

答案 1 :(得分:1)

您展示某物的方式不一定与存储物品的方式相同。

我不知道你如何计算时间,但假设你有一个开始日期和时间,以及一些间隔,你可以按如下方式计算结束时间:

date_default_timezone_set('Europe/London');

$start_datetime = new DateTime('2014-11-11T21:00:00');
$next_stop = new DateTime('2014-11-12T02:00:00');

echo $start_datetime->format('Y-m-d H:i'); // 2014-11-11 21:00
echo $next_stop->format('Y-m-d H:i'); // 2014-11-12 02:00

$interval = $start_datetime->diff($next_stop);

// display next stop: 2014-11-11 26:00
echo ($start_datetime->format('Y') + $interval->y) .'-'
     . ($start_datetime->format('m') + $interval->m) .'-'
     . ($start_datetime->format('d') + $interval->d) .' '
     . ($start_datetime->format('H') + $interval->h) .':'
     . ($start_datetime->format('i') + $interval->i);

我在做什么:创建开始日期(&amp; time)和下一站的日期时间。使用DateTime::diff()函数我正在计算差异,然后,仅用于显示(!)我将每年,每月,每天,每小时和每分钟加到下一站的日期时间年,月等。

通过这种方式,您仍然可以按照每个人和计算机系统都能理解的方式存储您的日期和时间(因为我们说实话;代表时间是下午27:45非常荒谬......)

我不知道你是否只想要将时间加起来并在24小时内滚动,或者也可以在一个月内滚动等等。这取决于你如何处理这些情况。祝你好运!