PHP Parse Date String

Если у меня есть строка даты:

$date = "08/20/2009";

И я хочу отделить каждую часть даты:

$m = "08";
$d = "20";
$y = "2009";

Как бы я это сделал?

Есть ли особая функция даты, которую я должен использовать? Или что-то другое?

Спасибо!

Ответы на вопрос(8)

Решение Вопроса

explode сделаем трюк для этого:

$pieces = explode("/", $date);
$d = $pieces[1];
$m = $pieces[0];
$y = $pieces[2];

Кроме того, вы можете сделать это в одну строку (см. Комментарии - спасибо, повезло):

list($m, $d, $y) = explode("/", $date);
 14 авг. 2009 г., 19:32
@Lucky - спасибо, отредактировано в.
 14 авг. 2009 г., 19:31
list ($ m, $ d, $ y) = взорваться (& quot; / & quot ;, $ date);

как насчет этого:

list($m, $d, $y) = explode("/", $date);

Быстрый один лайнер.

Проверьте PHPфункция date_parse, Если вы не уверены, что входные данные всегда будут в согласованном формате, и вы сначала проверяете его, это гораздо более стабильно и гибко (не говоря уже о том, что проще), чтобы позволить PHP попытаться проанализировать формат для вас.

например

<?php
//Both inputs should return the same Month-Day-Year
print_r(date_parse("2012-1-12 51:00:00.5"));
print_r(date_parse("1/12/2012"));
?>

Если у вас есть данный формат, вы должны использоватьДата объект.

$date = DateTime::createFromFormat('m/d/Y', '08/20/2009');
$m = $date->format('m');
$d = $date->format('d');
$y = $date->format('Y');

Обратите внимание, что вы можете использовать только один вызовDateTime :: формат ().

$newFormat = $date->format('d-m-Y');

Для интернационализированного анализа дат смотрите IntlDateFormatter :: parse -http://php.net/manual/en/intldateformatter.parse.php

Например:

$f = new \IntlDateFormatter('en_gb', \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE);
$dt = new \DateTime();
$dt->setTimestamp($f->parse('1/2/2015'));

Это всегда так? Или это будет в каком-либо формате файла?

Попробуйте strtotime.

Что-то вроде:

if(($iTime = strtotime($strDate))!==false)
{
 echo date('m', $iTime);
 echo date('d', $iTime);
 echo date('y', $iTime);
}

Доминик ответил хорошо, ноIF ДатаALWAYS в том же формате вы можете использовать это:

$m = substr($date,0,2);
$d = substr($date,3,2);
$y = substr($date,-4);

и не нужно использовать массив или взорваться

Билл Н

 12 мар. 2014 г., 18:40
Пожалуйста, нет! Подумайте о будущем читателе кода :)
 30 июл. 2015 г., 12:06
Почему человек хочет избежать взрыва?IF ДатаALWAYS в том же формате, Explode будет работать отлично, и, как подразумевает @GiDo, будет самодокументироваться с точки зрения намерений. Если кто-то хочет избежать массива, тоlist элементы из различных переменных.

Один из способов сделать это:

$time = strtotime($date);
$m = date('m', $time);
$d = date('d', $time);
$y = date('Y', $time);
 14 авг. 2009 г., 19:27
ARGH! Ты подтолкнул меня на это! лол
 14 авг. 2009 г., 19:33
Ах, но ваш ответ более надежный.
 10 сент. 2010 г., 19:02
Strtotime не всегда работает из-за ограничения по времени. Скажем, вы хотите разобрать первую мировую войну, вы не можете конвертировать 28/08/1914 в действительную метку времени.

Ваш ответ на вопрос