Как преобразовать дату для добавления метки времени в PHP?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

335
задан pimvdb 4 August 2011 в 04:32
поделиться

6 ответов

PHP's strtotime() дает

$timestamp = strtotime('22-09-2008');

, Который действительно работает с Поддерживаемые Форматы Даты и времени <глоток> Документы .

586
ответ дан hakre 23 November 2019 в 00:41
поделиться

Используя mktime:

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
43
ответ дан Till 23 November 2019 в 00:41
поделиться

Существует также strptime() , который ожидает точно один формат:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
185
ответ дан mathielo 23 November 2019 в 00:41
поделиться

Будьте осторожны с функциями как strtotime(), что попытка "предположить", что Вы имеете в виду (она не предполагает, конечно, правила, здесь ).

Действительно 22-09-2008 будет проанализирован как 22 сентября 2008 , поскольку это - единственная разумная вещь.

, Как будет 08-09-2008 быть проанализированным? Вероятно 09 августа 2008 .

Что относительно 2008-09-50? Некоторые версии PHP анализируют это как 20 октября 2008 .

Так, если Вы уверены, Ваш вход находится в DD-MM-YYYY формат, лучше использовать решение, предлагаемое @Armin Ronacher.

114
ответ дан Community 23 November 2019 в 00:41
поделиться

Если вы знаете формат, используйте strptime, потому что strtotime делает предположение для формата, которое может быть не всегда верным. Так как strptime не реализован в Windows, то существует пользовательская функция

Помните, что возвратная стоимость tm_year дана с 1900! и tm_month равна 0-11

Пример:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)
5
ответ дан 23 November 2019 в 00:41
поделиться

Вот как бы я это сделал:

function dateToTimestamp($date, $format, $timezone='Europe/Belgrade')
{
    //returns an array containing day start and day end timestamps
    $old_timezone=date_timezone_get();
    date_default_timezone_set($timezone);
    $date=strptime($date,$format);
    $day_start=mktime(0,0,0,++$date['tm_mon'],++$date['tm_mday'],($date['tm_year']+1900));
    $day_end=$day_start+(60*60*24);
    date_default_timezone_set($old_timezone);
    return array('day_start'=>$day_start, 'day_end'=>$day_end);
}

$timestamps=dateToTimestamp('15.02.1991.', '%d.%m.%Y.', 'Europe/London');
$day_start=$timestamps['day_start'];

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

4
ответ дан 23 November 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: