#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 😛