2010-09-06 7 views
7

Если у меня есть строка, которая представляет собой дату, например «2011/07/01» (которая является 1 июля 2011 года), как бы я выводил ее в более читаемые формы, например:Формат строки даты в PHP

1 July 2011 
1 Jul 2011 (month as three letters) 

а также, как я мог бы сделать это разумно показать диапазон дат, как «2011/07/01», чтобы «2011/07/11», как

1 - 11 July 2001 

(без повторения «июля» и «2011 'в этом случае)

ответ

16

Как уже упоминалось NullUserException, вы можете использовать strtotime для преобразования даты строки к отметкам времени. Вы можете вывести «умные» диапазоны, используя другой формат даты в первый день определяется путем сравнения годы, месяцы и дни:

$date1 = "2011/07/01"; 
$date2 = "2011/07/11"; 

$t1 = strtotime($date1); 
$t2 = strtotime($date2); 

// get date and time information from timestamps 
$d1 = getdate($t1); 
$d2 = getdate($t2); 

// three possible formats for the first date 
$long = "j F Y"; 
$medium = "j F"; 
$short = "j"; 

// decide which format to use 
if ($d1["year"] != $d2["year"]) { 
    $first_format = $long; 
} elseif ($d1["mon"] != $d2["mon"]) { 
    $first_format = $medium; 
} else { 
    $first_format = $short; 
} 

printf("%s - %s\n", date($first_format, $t1), date($long, $t2)); 
+0

Отлично Благодарю. Идеальное решение. – cannyboy

17

Вы можете конвертировать дату в метку времени, используя strtotime(), а затем используйте date() на этой отметке времени. На вашем примере:

$date = date("j F Y", strtotime("2011/07/01")); // 1 July 2011 
$date = date("j M Y", strtotime("2011/07/01")); // 1 Jul 2011 
1

Что касается второй:

$time1 = time(); 
$time2 = $time1 + 345600; // 4 days 
if(date("j",$time1) != date("j",$time2) && date("FY",$time1) == date("FY",$time2)){ 
    echo date("j",$time1)." - ".date("j F Y",$time2); 
} 

Can be seen in action here

Просто составляют больше условий

1

Я хотел бы использовать strtotimeИstrftime. Это гораздо более простой способ сделать это.

К примеру, если есть строку даты, как «20 октября 2001 18:29:50 GMT», и я хочу, чтобы получить его в формате день/месяц/год я мог бы сделать:

$mystring = "Oct 20 18:29:50 2001 GMT"; 
printf("Original string: %s\n", $mystring); 
$newstring = strftime("%d/%m/%Y", strtotime($mystring)); 
printf("Data in format day/month/year is: %s\n", $newstring); 
Смежные вопросы