как получить текущую дату / время как объект даты в PHP

Как вы получаете сегодняшнюю дату в качестве объекта даты?

Я пытаюсь вычислить разницу между какой-то датой начала и сегодняшним днем. Следующее не будет работать, потому чтоgetdate() возвращает массив, а не объект даты:

$today = getdate();           
$start = date_create('06/20/2012');
$diff = date_diff($start, $today);

echo($today . '<br/>' . $start . '<br/>' . $diff);

Выход:

Array ( [seconds] => 8 [minutes] => 1 [hours] => 16 [mday] => 11 [wday] => 1 [mon] => 6 [year] => 2012 [yday] => 162 [weekday] => Monday [month] => June [0] => 1339455668 )

DateTime Object ( [date] => 2012-06-20 00:00:00 [timezone_type] => 3 [timezone] => America/Los_Angeles )

Ответы на вопрос(3)

Решение Вопроса
new DateTime('now');

http://www.php.net/manual/en/datetime.construct.php

Сравнение легко:

$today = new DateTime('now');
$newYear = new DateTime('2012-01-01');

if ($today > $newYear) {

}

Op's edit Мне просто нужно было позвонитьdate_default_timezone_set, а затем этот код работал для меня.

 12 июн. 2012 г., 01:08
Я думаю явное$today = new DateTime("now"); является более понятным, даже если аргумент по умолчанию имеет значение «сейчас».
 McGarnagle12 июн. 2012 г., 01:25
Код$today = new DateTime('now'); на самом деле выбрасывает какую-то ошибку. (500 - внутренняя ошибка сервера)
 McGarnagle12 июн. 2012 г., 02:08
Я использую PHP5 в IIS.
 12 июн. 2012 г., 01:47
@dbaseman Можете ли вы быть более конкретным? Какую версию PHP вы используете?codepad.org/5lYyo8MC

date_create конструктор (без параметра) для получения текущей даты.

$diff = date_diff(date_create('06/20/2012'), date_create());
print_r($diff);

Output:

DateInterval Object ( [y] => 0 [m] => 0 [d] => 8 [h] => 6 [i] => 30 [s] => 40 [invert] => 1 [days] => 8 )

Я понятия не имею, почему, но ответ Майка Б. (и любой конструктор, для которого я пыталсяDateTime) выкинул ошибку для меня в PHP5 / IIS.

 McGarnagle12 июн. 2012 г., 02:54
@MikeB спасибо. Это была ошибка:It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function.  Однажды позвонюdate_default_timezone_setответ твой работает.
 12 июн. 2012 г., 02:49
Рад, что вы нашли решение. Если вам интересно узнать, почемуDateTime не удалось создать экземпляр, вы можете попытаться включить отчеты об ошибках. Ошибка 500 - это способ IIS сообщать вам, что PHP преуменьшен, но он не становится намного более конкретным. Вы можете запустить отчет об ошибках, поместив эти функции в начале вашего скрипта:error_reporting(-1); ini_set('display_errors', 1); ini_set('display_startup_errors', 1);, Журнал ошибок IIS также может содержать конкретные сообщения об ошибках.

Чтобы получить разницу в днях, используйте это:

$today = new DateTime('today');

время в этом объекте будет 00:00:00

Если вы хотите разницу с часами, минутами и секундами, используйте это:

$now = new DateTime('now');

Ваш ответ на вопрос