Форматирование строки даты в PHP

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

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

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

 1 - 11 July 2001 

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

Как упоминалось в 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 FY"; $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)); 

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

 $date = date("j FY", strtotime("2011/07/01")); // 1 July 2011 $date = date("j MY", strtotime("2011/07/01")); // 1 Jul 2011 

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

 $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 FY",$time2); } 

Здесь можно увидеть действие

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

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

Например, если у вас есть строка с датой типа «20 октября 18:29:50 2001 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);