Как сравнить две временные метки в пользовательском формате?
У меня есть две временные метки, которые сформированы следующим образом: substr( date( 'YmdHisu' ), 0, 17 )
20120921105240000
20120921115626000
Теперь, как мне их сравнить?
Я попытался сделать простой подход, такой как:
$diff = abs( 20120921105240000 - 20120921115626000 );
Но это не дает мне необходимого результата, так как время все портит. Все, что я хочу сделать, это выяснить, сколько минут (или секунд) прошло между ними.
Заранее благодарю.
3 answers
$date1 = DateTime::createFromFormat('Ymdhisu', '20120921105240000');
$date2 = DateTime::createFromFormat('Ymdhisu', '20120921115626000');
$interval = $date1->diff($date2);
print_r($interval);
/*DateInterval Object
(
[y] => 0
[m] => 0
[d] => 0
[h] => 1
[i] => 3
[s] => 46
[invert] => 0
[days] => 0
)*/
$seconds = $date2->getTimestamp()-$date1->getTimestamp();
echo $seconds;
Смотрите дополнительную информацию об объекте и методе.
Для PHP
$date1 = '20120921105240000';
$date2 = '20120921115626000';
function parse_mydate_string($string) {
if ($a = sscanf($string, '%4s%2s%2s%2s%2s%2s') {
if (FALSE !== $r = mktime($a[3], $a[4], $a[5], $a[1], $a[2], $a[0])) {
return $r;
}
}
throw new InvalidArgumentException('Not the expect date string.');
}
$diff = parse_mydate_string($date1) - parse_mydate_string($date2);
$absdiff = abs($diff);
Или sscanf
+ vsprintf
+ strtotime
:
$date1 = '20120921105240000';
$date2 = '20120921115626000';
$date1 = vsprintf('%s-%s-%s %s:%s:%s', sscanf($date1, '%4s%2s%2s%2s%2s%2s'));
$date2 = vsprintf('%s-%s-%s %s:%s:%s', sscanf($date2, '%4s%2s%2s%2s%2s%2s'));
$diff = abs(strtotime($date2) - strtotime($date1));
Или несколько substr
строковые операции + strtotime
:
$date1 = '20120921105240000';
$date2 = '20120921115626000';
$date1 = substr($date1, 0, 4).'-'.substr($date1, 4, 2).'-'.substr($date1, 6, 2).' '.substr($date1, 8, 2).':'.substr($date1, 10, 2).':'.substr($date1, 12, 2);
$date2 = substr($date2, 0, 4).'-'.substr($date2, 4, 2).'-'.substr($date2, 6, 2).' '.substr($date2, 8, 2).':'.substr($date2, 10, 2).':'.substr($date2, 12, 2);
$diff = abs(strtotime($date2) - strtotime($date1));
Вам лучше использовать стандартный формат даты/времени, чтобы избежать выполнения всей работы с нуля.
Взгляните на обсуждение здесь: PHP Как найти время, прошедшее с даты?
Попробуйте с strcmp
, конечно, лучший способ - преобразовать его в объект Datetime, прежде чем сравнивать его