Получите абсолютные дни далеко - PullRequest
2 голосов
/ 08 октября 2010

Я хочу получить абсолютные дни, а дата и время с сегодняшнего дня.Например, я хотел бы знать, будет ли дата через 2 дня, или через 78 дней, или даже через 5239 дней (маловероятно, но вы понимаете).Я использую базу данных MS SQL, которая возвращает даты и время, когда все компоненты времени равны 00: 00: 00.

date_diff возвращает относительные значения, с которыми вам затем нужно сделать некоторую сумасшедшую математику, чтобы получить абсолютные даты для расчетамесяцы, годы и т. д.

Кроме того, у меня возникают проблемы с получением компонента даты только сегодняшней даты в php.

Редактировать: Спасибо, господин.ш.Вот чем я закончил:

    $date = $row['AirdateDateTime'];
    $today = date_create(date("Y-m-d"));
    $away = date_diff($today, $date);
    $d = $away->format("%R%a");

Часть date_create () была той частью, которую я изначально пропустил, чтобы преобразовать ее в фактическую дату / время.Кроме того, формат должен быть %R%a.Использование %R%d работает только для дат в этом месяце.

Ответы [ 5 ]

3 голосов
/ 08 октября 2010

Функция date_diff () (на самом деле, метод DateTime :: diff ()) - это то, что вам нужно, и на самом деле это не сложно.На самом деле, я думаю, что пример в документах - это именно то, что вам нужно:

<?php
    $datetime1 = new DateTime('2009-10-11');
    $datetime2 = new DateTime('2009-10-13');
    $interval = $datetime1->diff($datetime2);
    echo $interval->format('%R%d days');
?>

или

<?php
    $datetime1 = date_create('2009-10-11');
    $datetime2 = date_create('2009-10-13');
    $interval = date_diff($datetime1, $datetime2);
    echo $interval->format('%R%d days');
?>

Возвращается объект DateInterval, который вы можете отформатировать любым способом.Вы хотите с его методом format ().Выше, это форматируется до дней, но у вас есть тонна вариантов;см. http://us.php.net/manual/en/dateinterval.format.php.

Вам не нужно делать какие-либо математические операции самостоятельно.

[РЕДАКТИРОВАТЬ - забыл эту часть]

Что касается получения компонента даты сегодняшней даты,Вы можете сделать что-то вроде этого:

<?php
    echo date('Y-m-d');
?>

См. http://us.php.net/manual/en/function.date.php.

2 голосов
/ 28 октября 2014

Попробуйте это

$date1 = new DateTime('2012-10-28 00:00:00',new DateTimeZone('Europe/London'));
$date2 = new DateTime('2012-10-28 03:00:00',new DateTimeZone('Europe/London'));
$interval = date_diff($date1, $date2);
$format = '%y years, %m months, %d days, %h hours, %i minutes, %s seconds, %a total days %R';
echo $interval->format($format);

, если хотите изменить формат, попробуйте это http://www.w3schools.com/php/func_date_date.asp

1 голос
/ 08 октября 2010

Вероятно, проще всего конвертировать в метки времени Unix (секунды с 1970 года) и затем получить разницу.

strtotime() and time() ваши друзья.

1 голос
/ 08 октября 2010

Альтернативой тому, что уже было предложено, является библиотека DateTime:

$today = date("Y-m-d");
$today = new DateTime($today);
$future = new DateTime('2010-10-25');
$interval = $today->diff($future);
echo $interval->format('%d days away'); //outputs 17 days away
1 голос
/ 08 октября 2010

Звучит так, как ты хочешь

<?php

$yourDate = '2010-10-05';
echo ciel((strtotime($yourDate) - time()) / 60 / 60 / 24);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...