Как преобразовать эту строку 05/Feb/2010:14:00:01
в unixtime?Преобразование строки На сегодняшний день в PHP
ответ
Для PHP 5.3 это должно работать. Возможно, вам придется возиться с передачей $ dateInfo ['is_dst'], так или иначе, для меня не работало.
$date = '05/Feb/2010:14:00:01';
$dateInfo = date_parse_from_format('d/M/Y:H:i:s', $date);
$unixTimestamp = mktime(
$dateInfo['hour'], $dateInfo['minute'], $dateInfo['second'],
$dateInfo['month'], $dateInfo['day'], $dateInfo['year'],
$dateInfo['is_dst']
);
Версии ранее, это должно работать.
$date = '05/Feb/2010:14:00:01';
$format = '@^(?P<day>\d{2})/(?P<month>[A-Z][a-z]{2})/(?P<year>\d{4}):(?P<hour>\d{2}):(?P<minute>\d{2}):(?P<second>\d{2})[email protected]';
preg_match($format, $date, $dateInfo);
$unixTimestamp = mktime(
$dateInfo['hour'], $dateInfo['minute'], $dateInfo['second'],
date('n', strtotime($dateInfo['month'])), $dateInfo['day'], $dateInfo['year'],
date('I')
);
Возможно, вам не нравятся регулярные выражения. Конечно, вы могли бы комментировать его, но не всем это нравится. Таким образом, это альтернатива.
$day = $date[0].$date[1];
$month = date('n', strtotime($date[3].$date[4].$date[5]));
$year = $date[7].$date[8].$date[9].$date[10];
$hour = $date[12].$date[13];
$minute = $date[15].$date[16];
$second = $date[18].$date[19];
Или подрыв или взрыв, независимо от того, что вы хотите разобрать эту строку.
Вы должны изучить strtotime() function.
Я посмотрел, но не могу заставить его работать – streetparade
Ваша строка может быть несовместима с strtotime(); вам, возможно, придется сначала отформатировать его. –
Используйте strtotime
функции:
Пример:
$date = "25 december 2009";
$my_date = date('m/d/y', strtotime($date));
echo $my_date;
Я не вижу каких-либо поддерживаемых форматов strtotime в руководстве – streetparade
@streetparade: я имею в виду, например, вы не можете передать ему всевозможные строки для даты, например «28 из двух тысяч десятых декабря» – Sarfraz
Стоит отметить, что strtotime также поддерживает ключевые слова и фразы типа «вчера» или «этот день на следующей неделе»; p – Rowan
Простой взрывающаяся должен сделать трюк:
$monthNamesToInt = array('Jan'=>1,'Feb'=>2, 'Mar'=>3 /*, [...]*/);
$datetime = '05/Feb/2010:14:00:01';
list($date,$hour,$minute,$second) = explode(':',$datetime);
list($day,$month,$year) = explode('/',$date);
$unixtime = mktime((int)$hour, (int)$minute, (int)$second, $monthNamesToInt[$month], (int)$day, (int)$year);
Если вы за него, используйте DateTime класс
Попробуйте это:
$new_date=date('d-m-Y', strtotime($date));
Это сокращение из-за избыточности. Сам ответ правильный, но ранее он был предоставлен 8 февраля Сарфразом. –
$d="05/Feb/2010:14:00:01";
$dr= date_create_from_format('d/M/Y:H:i:s', $d);
echo $dr->format('Y-m-d H:i:s');
здесь вы получите date, указать спецификатор формата в -> format() в соответствии с необходимым форматом
Если это строка, которой вы доверяете, значит, что вы проверили ее перед рукой, тогда также будет работать следующее.
$date = new DateTime('2015-03-27');
Проблема с DateTime заключается в том, что будет преобразовывать часовой пояс. – Roninio
Это совсем не работает. Он говорит, что date_parse_from_format не определен. –
@xcoder, перечитайте мой ответ, пожалуйста. – erisco