Форматировать строку даты в PHP - PullRequest
7 голосов
/ 07 сентября 2010

Если у меня есть строка, представляющая дату, например «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» вэто дело)

Ответы [ 4 ]

17 голосов
/ 07 сентября 2010

Вы можете преобразовать дату в метку времени, используя 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
16 голосов
/ 07 сентября 2010

Как упомянуто исключение 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));
1 голос
/ 30 мая 2013

Я бы использовал strtotime И 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);
1 голос
/ 07 сентября 2010

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

$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);
}

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...