strtotime而不是这个很长的功能?

时间:2011-11-17 04:23:26

标签: php date format

我正在挖掘这个专业程序员为我设置的活动网站的代码,我发现这个功能似乎超级混乱,因为它看起来像"strtotime"的一行代码会做同样的事情。

是不是因为我们希望在月份之后使用"Jan 2nd"格式和两个字母?

function convert_date_to_web($date) {
    if (empty($date) || $date == "0000-00-00") return $date;
    switch ($date[5].$date[6]) {
        case '01':
        $month = 'Jan';
        break;
        case '02':
        $month = 'Feb';
        break;
        case '03':
        $month = 'Mar';
        break;
        case '04':
        $month = 'Apr';
        break;
        case '05':
        $month = 'May';
        break;
        case '06':
        $month = 'Jun';
        break;
        case '07':
        $month = 'Jul';
        break;
        case '08':
        $month = 'Aug';
        break;
        case '09':
        $month = 'Sep';
        break;
        case '10':
        $month = 'Oct';
        break;
        case '11':
        $month = 'Nov';
        break;
        case '12':
        $month = 'Dec';
    }
    if($date[9] == "1") {
        $day = $date[9]."st";
    }
    else if ($date[9] == "2") {
        $day = $date[9]."nd";
    }
    else if ($date[9] == "3") {
        $day = $date[9]."rd";
    }
    else {
        $day = $date[9]."th";
    }
    if($date[8] != "0") {
        $day = $date[8].$day;
    }
    $date = $month." ".$day.", ".$date[0].$date[1].$date[2].$date[3];
    return $date;
}

我的版本是

$timestamp = strtotime($event->start_date);
$start_date = date("M d, Y", $timestamp); 

4 个答案:

答案 0 :(得分:2)

这是原始函数的精确复制。我使用了两个版本,第一个使用strtotime,第二个使用explode来避免使用strtotime。

$date = '2011-10-01';
$date_format = 'M jS, Y'; // Three letter month, day name w/o leading zero, day suffix, year
echo date( $date_format, strtotime( $date)) . "\n";

$date_pieces = explode( '-', $date);
echo date( $date_format, mktime( 0, 0, 0, $date_pieces[1], $date_pieces[2], $date_pieces[0]));

Demo

答案 1 :(得分:0)

烨。我认为这就是长期功能的原因所在。它是添加“st”,“nd”,“rd”和“th”。

您的代码不会这样做。也许你可以这样试试? (需要调试,因为我从未在实际的php上测试过它)

$timestamp = strtotime($event->start_date);
$start_date = date("M d", $timestamp);
$lastNum = substr($start_date, -1)
switch($lastNum) {
  case "0":
    break;
  case "1":
    $start_date .= "st"; break;
  case "2":
    $start_date .= "nd"; break;
  case "3":
    $start_date .= "rd"; break;
  default:
    $start_date .= "th"; break;
}
$start_date .= date(", Y", $timestamp);

答案 2 :(得分:0)

我更喜欢这样的爆炸()解决方案而不是strtotime()的原因是它们提供的确定性,可移植的结果少于surprising而strtotime()会产生一些复杂的魔法。

答案 3 :(得分:0)

与所有编程一样,有多种方法可以做某事。经验教会程序员以某种方式做事。从这个函数的外观来看,如果要将mysql日期的默认输出格式转换为将月份转换为字符串的版本。这对我来说很好看