2017-02-16 9 views
0

Я получаю дату из базы данных MySQL:быстрый способ получить месяц, день, год, из строки даты

вот что это выходит как:

2017-01-20 

, что было бы самым быстрым способ получить месяц, день и год, так что, например, когда я эхо, это будет выглядеть следующим образом:

echo $month; //01 
echo $day; //20 
echo $year; //2017 
+0

Подсказки: 'месяц ('2017-01-20'), год ('2017-01-20'), день ('2017-01-20')' в mysql. – Blank

ответ

1

предположим, у вас есть эта строка в переменной с именем $date

$date = '2017-01-20'; 

Вы можете explode его в list, если вы уверены, что формат соответствует:

list($year, $month, $day) = explode("-", $date, 3); 

Вы можете преобразовать дату к времени целого числа, используя strtotime для использования в других функций, таких как date. Это имеет дополнительное преимущество, заключающееся в состоянии проверить, что это хорошо сформированную дата:

$time = strtotime($date); 
if ($time === false) die("Bad date format: $date."); 
$year = date('Y', $time); 
$month = date('m', $time); // 'n' if you don't want leading zero 
$day = date('d', $time); // 'j' if you don't want leading zero 

Как jasonmoqio баллов из, так как вы просили быстро, substr это чуть-чуть быстрее, чем взрыва. (На моей рабочей станции looping substr vs. explode 10 миллионов раз только улучшал 1/1000-й секунды в результате взрыва, поэтому, если это не в цикле, который запускается миллионы раз, вы не заметите разницы и должны выбрать . читабельность кода)

$year = substr($date, 0, 4); 
$month = substr($date, 5, 2); 
$day = substr($date, 8, 2); 
+0

ваш работал, но он медленный по сравнению с 'substr' – jasonmoqio

1

Ну, если вы знаете, что выход будет постоянно быть строкой в ​​формате «YYYY-MM-DD», самый основной подход:

<?php 

    $query = ... //query is your string "YYYY-MM-DD" 
    $year = substr($query, 0, 4); 
    $month = substr($query, 5, 2); 
    $day = substr($query, 8, 2); 

    echo $month; 
    echo $day; 
    echo $year; 
?> 
+0

Третий аргумент substr - длина, а не позиция. поэтому первый должен быть '$ year = substr ($ date, 0, 4);' и так далее. – redreinard

+0

Приношу свои извинения за беспорядок на языке. Мой ответ был отредактирован. Спасибо! –

+0

Извините, ошибка снова, но месяц и день требуется длина 2, длина не равна 0. – redreinard

0

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

$date = new DateTime('2017-01-20'); 
echo 'Year:'.$date->format("Y"); 
echo 'Month:'.$date->format("m"); 
echo 'Day:'.$date->format("d"); 

Выход:

Year: 2017 
Month: 01 
Day: 20 
0

Если вы хотите быстро получить дату из MySQL, попробуйте использовать регулярные выражения, как это.

if (preg_match('/^(?P<year>\d+)[-\/](?P<month>\d+)[-\/](?P<day>\d+)$/', $your_date, $matches)) { 
    $mydate = $matches['year'] . "-" . $matches['month'] . "-" . $matches['day']; 
    $whatever = date('Y-m-d', strtotime($tgl)); 
    // You can echo it... 
    // echo $matches['year']; 
    // echo $matches['month']; 
    // echo $matches['day']; 
} 

Надеюсь, это поможет вам. : D