Как мне получить как можно более раннюю дату и время в php?

#php #datetime #php-7

#php #дата и время #php-7

Вопрос:

Насколько я понимаю, даты в php представлены как количество миллисекунд после определенной даты (я думаю, в 1960 году?). Как мне создать дату и время, которые представляют самую раннюю допустимую дату в php? Примером возможного синтаксиса может быть:

 $date = new DateTime(0);
  

но это не работает. Есть ли какой-нибудь другой способ сделать это?

Спасибо за любой вклад.

Комментарии:

1. просто любопытно: зачем вам это нужно?

2. в любом случае, вы можете попробовать $date = new DateTime()->setTimestamp(0);

3. Я перебираю массив datetimes, чтобы получить последнее, и мне нужно инициализировать переменную, которую я использую для хранения текущего последнего datetime во что-то, что определенно раньше любого из элементов массива. В противном случае может возникнуть случай, когда все datetimes произошли до начального значения этой переменной, которое затем будет неверно возвращено как последнее datetime.

4. тогда я предлагаю использовать null, и такие конструкции, как if ($min==null || $current<$min) $min = $current; , конечно, меняются < при соответствующем вызове метода

5. Это хорошее решение моей проблемы. Спасибо.

Ответ №1:

Вы довольно близки

 $date = (new DateTime())->setTimestamp(0);
  

Даст 1 января 1970 года

Комментарии:

1. Или более короткий способ, который достигает того же: $date = new DateTime(‘@0’);

2. За исключением того, что это не минимальная дата: когда DateTime передается временная метка unix, она считается «с эпохи», а не «с того момента, с которого можно считать даты».

Ответ №2:

Я думаю, что наименьшие и наибольшие даты, которые будет принимать объект DateTime, следующие (на 64-разрядной машине начиная с PHP 7.4, продемонстрировано с использованием PHPUnit). Это может быть полезно при предоставлении минимальных и максимальных значений по умолчанию в средстве проверки даты как для DateTime, так и для Carbon. Этот ответ также опубликован в примечаниях пользователя к странице руководства по PHP для DateTime::__construct().

Если вы хотите получить очень точную информацию об этом, измените приведенный ниже код, чтобы учесть время и часовой пояс.

     // smallest date
    $input = '-9999-01-01';
    $dt = new DateTime($input);
    self::assertEquals($input, $dt->format('Y-m-d'));
    $input = '-10000-12-31';
    $dt = new DateTime($input);
    self::assertEquals('2000-12-31', $dt->format('Y-m-d'));

    // largest date
    $input = '9999-12-31';
    $dt = new DateTime($input);
    self::assertEquals($input, $dt->format('Y-m-d'));
    $input = '10000-01-01';
    $dt = new DateTime($input);
    self::assertEquals('2000-01-01', $dt->format('Y-m-d'));
  

Ответ №3:

 echo date('d-m-Y', 0); // outputs: 01-01-1970
  

epoch 0 дает временную метку unix 01-01-1970 или 00:00:00 UTC 1 января 1970 года.

Комментарии:

1. или echo date('d-m-Y', PHP_INT_MIN) для самой ранней возможной даты, а не эпохи

2. дата (‘d-m-Y’, PHP_INT_MIN) возвращает 292277026596-12-04 07:37:10.000000 😛