PHP: продолжительность тренировки между двумя - PullRequest
7 голосов
/ 11 февраля 2009

Хорошо, действительно простой вопрос, но я слишком толстый, чтобы понять это. Я хочу получить разницу между двумя разами. Например, «1:07» (1 минута и 7 секунд) и «3:01» (3 минуты и 1 секунда). Это будут только минуты и секунды. Я пытался использовать это:

function timeDiff($firstTime,$lastTime)
{

// convert to unix timestamps
$firstTime=strtotime($firstTime);
$lastTime=strtotime($lastTime);

// perform subtraction to get the difference (in seconds) between times
$timeDiff=$lastTime-$firstTime;

// return the difference
return $timeDiff;
}

Но я думаю, что я иду в неправильном направлении?

Спасибо за любую помощь.

EDIT

Я пробовал это: echo timeDiff ('1:07', '2:30');

Я получил этот вывод "4980"

Что выше? Это секунды? Я понятия не имею, как получить это как "1:23", в чем разница.

РЕДАКТИРОВАТЬ 2

Спасибо всем, я многому научился только из этой темы, особенно. Павла. Это работает очень хорошо, и мне нравится защита!

Ответы [ 5 ]

13 голосов
/ 11 февраля 2009

Вы не можете использовать strtotime, поскольку оно будет интерпретировать MM: SS как HH: MM - поэтому вы получаете более высокие значения, чем ожидалось.

Вы можете просто добавить значения MM: SS к '00: ', чтобы они выглядели как ЧЧ: ММ: СС.

Обратите внимание, однако, что strtotime, если ему просто дано значение ЧЧ: ММ: СС, даст метку времени для сегодня , что хорошо для одноразового кода. Не используйте эту технику для чего-то важного, подумайте, что произойдет, если ваши два звонка в strtotime переместятся в полночь!

Кроме того, что-то вроде этого превратит значение MM: SS в метку времени, которую вы можете сделать арифметическим на

function MinSecToSeconds($minsec)
{
    if (preg_match('/^(\d+):(\d+)$/', $minsec, $matches))
    {
        return $matches[1]*60 + $matches[2];
    }
    else
    {
        trigger_error("MinSecToSeconds: Bad time format $minsec", E_USER_ERROR);
        return 0;
    }
}

Это немного более оборонительно, чем использование взрыва, но демонстрирует другой подход!

6 голосов
/ 11 февраля 2009

Это должно дать вам разницу между двумя разами в секундах.

$firstTime = '1:07';
$secondTime = '3:01';

list($firstMinutes, $firstSeconds) = explode(':', $firstTime);
list($secondMinutes, $secondSeconds) = explode(':', $secondTime);

$firstSeconds += ($firstMinutes * 60);
$secondSeconds += ($secondMinutes * 60);
$difference = $secondSeconds - $firstSeconds;
3 голосов
/ 11 февраля 2009

Функция strtotime предназначена для преобразования дат (с точностью до секунды) в строковом формате в формат Unix Timestamp. Это НЕ для преобразования строк в формате времени во что-либо. Посмотрите, помогают ли эти два показателя вашему недооценке

//recent php5 for DATE_RFC822
echo date(DATE_RFC822,strtotime('1:07'));
echo date(DATE_RFC822,strtotime('3:01'));   

Звучит так, будто ты хочешь что-то подобное

function timeDiff($firstTime,$lastTime)
{
    //split minutes and seconds
    list($min_one, $sec_one) = preg_split('{:}',$firstTime,2, PREG_SPLIT_NO_EMPTY);
    list($min_two, $sec_two) = preg_split('{:}',$lastTime ,2, PREG_SPLIT_NO_EMPTY);

    //convert times into seconds
    $time_one = $min_one * 60 + $sec_one;
    $time_two = $min_two * 60 + $sec_two;

    //return times
    return $time_two - $time_one;
}

echo timeDiff('1:07','3:10');
3 голосов
/ 11 февраля 2009

Используя найденный код здесь , как насчет подсчета секунд самостоятельно:

<?php

function time_to_sec($time) {
    $hours = substr($time, 0, -6);
    $minutes = substr($time, -5, 2);
    $seconds = substr($time, -2);

    return $hours * 3600 + $minutes * 60 + $seconds;
}

function sec_to_time($seconds) {
    $hours = floor($seconds / 3600);
    $minutes = floor($seconds % 3600 / 60);
    $seconds = $seconds % 60;

    return sprintf("%d:%02d:%02d", $hours, $minutes, $seconds);
} 


function timeDiff($firstTime,$lastTime)
{

// convert to seconds
$firstTime=time_to_sec($firstTime);
$lastTime=time_to_sec($lastTime);

// perform subtraction to get the difference (in seconds) between times
$timeDiff=$lastTime-$firstTime;

// return the difference
return sec_to_time($timeDiff);
}

echo timeDiff("1:07", "3:01");


?>

возвращает 0: 01: 54

0 голосов
/ 09 июня 2015
$time1 = date("H:i",strtotime($strtime));
$time2 = date("H:i");
list($hours, $minutes) = explode(':', $time1);
$startTimestamp = mktime($hours, $minutes);

list($hours, $minutes) = explode(':', $time2);
$endTimestamp = mktime($hours, $minutes);

$seconds = $endTimestamp - $startTimestamp;
$minutes = ($seconds / 60) % 60;
$hours = floor($seconds / (60 * 60));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...