在PHP中格式化日期字符串

时间:2010-09-06 20:21:02

标签: php date

如果我有一个表示日期的字符串,例如“2011/07/01”(2011年7月1日),我将如何以更易读的形式输出,例如:

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

而且,我怎么能聪明地将日期范围如“2011/07/01”显示为“2011/07/11”

1 - 11 July 2001

(在这种情况下不重复'七月'和'2011')

4 个答案:

答案 0 :(得分: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 :(得分: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));

答案 2 :(得分: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

只是弥补更多条件

答案 3 :(得分:1)

我会使用strtotime AND strftime。这是一种更简单的方法。

例如,如果a有一个日期字符串,例如“Oct 20 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);