2016-09-29 4 views
-1

Я пытаюсь сортировать таблицу дат, но проблема, которая, как мне кажется, заключается в том, что эти даты являются строками, отформатированными как d M Y (так что-то вроде "04 SEPT 2016").даты преобразования и сортировки в PHP

Я предполагаю, что эти даты не хранятся как временные метки в базе данных (если это имеет смысл), а скорее как нормальная строка, которая должна быть преобразована обратно во что-то, что можно сортировать.

+0

вы можете использовать как этот формат: $ current_date_time = $ Дата-> формат ('Ymd G: I: S'); ... Если дать четкую информацию. Я могу помочь вам решить проблему .. –

ответ

1

В PHP вы можете использовать интерфейс datetime. См. Описание спецификатора формата на странице руководства. Он позволяет анализировать дату в объекте, задавая спецификаторы формата. Класс DateTime поддерживает сортировку и операторы, такие как <, >, == и т.д.

можно разобрать дату, используя:

$list = []; 
$d = DateTime::createFromFormat($time, 'd M Y'); 
$list[] = $d; ### add to list 

Теперь вы можете сортировать его как DateTime поддерживает сортировку:

sort($list); 
reset($list); 
foreach($list as $sorted_date) { 
    ... 
} 

См. Также 2

1

Это имеет смысл и как вы это будет зависеть от того, что вы хотите сделать.

Вы можете преобразовать строку в дату, используя функции даты и времени в PHP: (процедурный метод)

<?php 
$date = date_create_from_format('j-M-Y', '15-Feb-2009'); 
echo date_format($date, 'Y-m-d'); 
?> 

http://php.net/manual/en/datetime.createfromformat.php


Или, если вы хотите, чтобы выбрать/обновить/изменить/и т.д. в запросе базы данных MySQL (небольшое предположение, что вы будете использовать MySQL), вы можете использовать функцию STR_TO_DATE

STR_TO_DATE('21,5,2013','%d,%m,%Y'); 

http://www.mysqltutorial.org/mysql-str_to_date/

Чем больше вопрос здесь есть ли возможности для преобразования даты из строки с датами внутри БД, так как это правильный способ делать вещи.

0

ВЫБРАТЬ STR_TO_DATE (поле, '% м /% d /% Y') FROM таблицы ORDER BY STR_TO_DATE (поле, '% м /% d /% Y')

0

Если вы хотите сортировать с PHP, то вы можете попробовать этот трюк:

<?php 
    $myarray=array(
     "2 SEPT 2016", 
     "9 SEPT 2016", 
     "1 OCT 2016", 
     "3 DEC 2016", 
     "4 SEPT 2016", 
    ); 
    usort($myarray, "cmpare"); 
    print_r($myarray); 

    function cmpare($x, $y){ 
     return strcmp(strtotime($y), strtotime($x)); 
    } 
?> 
Смежные вопросы