Как я могу вычесть 2 даты друг от друга? - PullRequest
0 голосов
/ 01 декабря 2011

Я хочу вычесть дату в будущем из сегодняшней даты, я хочу, чтобы она отображала день, час и минуты до целевой даты.

Вот мой код

<?php

date_default_timezone_set('Europe/London');

$format = "h:i d";
$date = date($format);
$target = date($format, mktime(0,0,0,12,8,2011));

echo date($format, $target-$date);

?>

С уважением, Адам

Ответы [ 2 ]

5 голосов
/ 01 декабря 2011

Не используйте date для операций, оно предназначено для отображения дат. Вместо этого вычтите 2 отметки времени:

...
$date = mktime(now...);
$target = mktime(0,0,0,12,8,2011);

echo date($format, $target - $date);

Но вы должны понимать, что временные метки начинаются в 1970 году и заканчиваются в 2038 году, поэтому, например, 2011 - 2007 = 1974.

Более подходящим в вашем случае будет date_diff, как @Kerrek SB предложил в комментарии.

Пример (с php.net):

$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days'); // +2 days
1 голос
/ 01 декабря 2011

Может быть, это поможет вам

<?php

$target = mktime (23, 34, 0, 9, 28, 2009);

$today = mktime();

$difference =($target-$today) ;

$days = $difference / 3600 / 24;
$difference = $difference - floor($days) * 3600 * 24;
$hours = $difference / 3600;
$difference = $difference - floor($hours) * 3600;
$minutes = $difference / 60;
echo "Days: ";
echo floor($days);
echo "<br />";
echo "Hours: ";
echo floor($hours);
echo "<br />";
echo "Minutes: ";
echo floor($minutes);

?>
...