Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
PHP's strtotime()
дает
$timestamp = strtotime('22-09-2008');
, Который действительно работает с Поддерживаемые Форматы Даты и времени <глоток> Документы глоток> .
Используя mktime:
list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
Существует также 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);
Будьте осторожны с функциями как strtotime()
, что попытка "предположить", что Вы имеете в виду (она не предполагает, конечно, правила, здесь ).
Действительно 22-09-2008
будет проанализирован как 22 сентября 2008 , поскольку это - единственная разумная вещь.
, Как будет 08-09-2008
быть проанализированным? Вероятно 09 августа 2008 .
Что относительно 2008-09-50
? Некоторые версии PHP анализируют это как 20 октября 2008 .
Так, если Вы уверены, Ваш вход находится в DD-MM-YYYY
формат, лучше использовать решение, предлагаемое @Armin Ronacher.
Если вы знаете формат, используйте 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)
Вот как бы я это сделал:
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'];
Таким образом, вы сообщаете функции, какой формат даты вы используете, и даже указываете часовой пояс.