Как я могу получить год, месяц и день из ряда чисел? - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть дата, которая мне дана в форме 20111213 (YYYYMMDD), и я пытаюсь разделить части на день, месяц и год.Я использую этот код:

$day = substr($string, 6, 8);
$month = substr($string, 4, 6);
$year = substr($string, 0, 4);
$final = $day . "-" . $month . "-" . $year;
echo $final;

, но это дает мне вывод

13-1213-2011

Как видите, месяц интерпретируется как 4 символа, и я не могу получить его просток выводу 12. Приветствия за помощь.

Ответы [ 4 ]

6 голосов
/ 13 декабря 2011

Вы неправильно используете третий аргумент.Это длина требуемой подстроки, а не конечная позиция:

$day = substr($string, 6, 2);    // 2 char substring
$month = substr($string, 4, 2);  // 2 char substring
$year = substr($string, 0, 4);   // 4 char substring

$final = $day . "-" . $month . "-" . $year;
echo $final;
// 13-12-2011

См. Документацию для правильного использования.

1 голос
/ 13 декабря 2011

Прочтите руководство substr , третий параметр $length

0 голосов
/ 13 декабря 2011

Попробуйте это

var_dump(date('Y M d', strtotime('20111213')));

Выход: -

'2011 дек. 13'

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

http://www.php.net/date
http://www.php.net/strtotime

В качестве альтернативы: -

$date = new DateTime('20111213');
$year = $date->format('Y');
$month = $date->format('M');
$day = $date->format('d');
echo "$year $month $day";

Выход: -

2011 дек. 13

http://www.php.net/datetime

Во всех этих примерах меняйте 'M' на 'm' в строке формата, чтобы получить '12' вместо 'Dec'.

Если вы ищете этот вывод "2011-12-13", тогда используйте

$date = new DateTime('20111213');
echo $date->format('Y-m-d');
0 голосов
/ 13 декабря 2011

Использование

        $string = "20111213";
        $day = substr($string, 6, 2);
        $month = substr($string, 4, 2);
        $year = substr($string, 0, 4);
        $final = $day . "-" . $month . "-" . $year;
        echo $final;
...