2010-05-02 4 views
19

Я тяну даты различных сообщений из базы данных. Даты в следующем формате:Как переформатировать дату в PHP?

2009-08-12 

Numeric Year - Numeric Month - Numeric Day 

Как переформатировать эти даты на что-то более дружественным к пользователю, как:

August 12, 2009 

Numeric Month Numeric Date, Numeric Year 

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

$date = $row['date_selected']; 
+2

Сохраняется ли она как строка в этой форме или поле даты MySQL типа даты? Если это так, вы можете отформатировать его правильно при выполнении вызова SELECT. – LukeN

+0

Это когда вы сразу получаете 3 ответа, все с теми же двумя вызовами функций, что вы должны понимать, что документация дала бы вам ответ.Для вашей справки: http://www.php.net/manual – icio

+1

@icio, я соглашусь, что это относительно простой вопрос для поиска, если вы знаете, где искать, но на самом деле есть два метода, обсуждаемых ниже , Плюс, я думал, что вопросов нет слишком просто, если они связаны с программированием. По крайней мере, это то, что Джоэл всегда говорит в подкасте .... – sprugman

ответ

42

date("F d, Y", strtotime($input))

+3

Вы не можете обеспечить правильную обработку, просто вызвав strtotime. Например, кто-то может переключать месяц и день, и strtotime не справится с этим. –

+1

Поскольку это было выбрано в качестве ответа, несмотря на меньшее количество голосов, чем у @ Billy's, я повторю свой комментарий из ответа @ chacha ниже: Метод strtotime является «стандартным», и если настройки локали вашего сервера ожидают месячный -year, он будет работать очень хорошо, но метод @ Billy более безопасен, если у вас есть доступный php 5.3, который на общем хосте определенно не является безопасным предположением. – sprugman

+0

Более того, UNIX-эпоха о EOL в ближайшем будущем и, глядя в будущее, не рекомендуется использовать 'strtotime()', если у вас есть возможность использовать объект DateTime. + 'strtotime()' не всегда адекватен и он знает проблемы, но ответ, безусловно, будет работать в большинстве случаев. –

6
$new_format = date("Your Date String", strtotime($date)); 

См:
- http://php.net/strtotime
- http://php.net/date

В принципе, если strtotime() может прочитать его правильно, вы можете переформатировать его в любом случае вам пожалуйста.

В этом случае Year - Month - Day - это правильно распознанный формат strtotime(), это может быть не так для других форматов.

+1

Вы не можете обеспечить правильную обработку, просто вызвав strtotime. Например, кто-то может переключать месяц и день, и strtotime не справится с этим. –

+0

Как я уже сказал, если 'strtotime()' может читать его правильно, вы можете это сделать. –

+0

, но там нет, чтобы программно определить, если дата правильно отформатирована, если у вас есть только строка «2009-08-02». Чтобы это было возможно, вам придется иметь отдельные поля ввода для года, месяца и дня. – Femaref

50

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

$date = DateTime::createFromFormat('Y-m-d', '2009-08-12'); 
$output = $date->format('F j, Y'); 
+5

+1: 'DateTime' всегда следует выбирать вместо' strtotime'. – dalle

+2

Вы можете сделать это на одной строке: '$ date = DateTime :: createFromFormat ('Ym-d', '2009-08-12') -> format ('F j, Y');' – wmassingham

+0

+1 Это это лучший ответ. strtotime() не всегда корректна, так как форматы dd/mm/yyyy выглядят точно так же, как и форматы mm/dd/yyyy. – JoeMoe1984

0

Вы можете посмотреть на функции PHP strtotime:

http://php.net/manual/en/function.strtotime.php

Он будет анализировать большое количество дат представлений на метку времени Unix.

Затем используйте функцию date.

0

Используйте это так:
// 1 февраля 2005
дата печати ("F J, Y", указываете ей (0,0,0,14,1,2004));

0

Использование StrToDate или взорваться, чтобы разделить дату в различных ее компонентов, вы можете использовать функцию дате с соответствующей строкой формата: http://php.net/manual/en/function.date.php

$date = "2009-08-12"; 
list($year,$month,$day) = explode("-",$date); 
$formattedDate = date("F d, Y", mktime(0,0,0,$month,$day,$year)); 

Выходы: «12 августа 2009»

0
<?php 
//Date Formatter 
/* 
date: date you want to convert 
format: its current format ie m-d-Y, m/d/Y, Y-m-d, Y/m/d 
delimS: Current delimiter ie - or/or . 
delimF: The delimiter you want for the result 

NOTE: this will only convert m-d-Y to Y-m-d and back 
*/ 
function dtform($date,$format,$delimS,$delimF){ 
    $dateFinal = ''; 
    if($format == 'm'.$delimS.'d'.$delimS.'Y'){ 
     $dateFinal_exp = explode($delimS,$date); 
     $dateFinal = $dateFinal_exp[2].$delimF.$dateFinal_exp[0].$delimF.$dateFinal_exp[1]; 
    }else if($format == 'Y'.$delimS.'m'.$delimS.'d'){ 

     $dateFinal_exp = explode($delimS,$date); 
     $dateFinal = $dateFinal_exp[1].$delimF.$dateFinal_exp[2].$delimF.$dateFinal_exp[0]; 
    } 
    return $dateFinal; 
} 
?> 
Смежные вопросы