2011-11-17 35 views
0

我正在挖掘这个专业程序员为我设计的一个活动网站的代码,我发现这个功能似乎超级混乱,因为它看起来像1行代码与"strtotime"会做同样的事情。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); 
+1

你能找到任何的例子在您的代码的工作和他们没有(或者相反?)。如果它们是可以互换的,那么我想你就跟着你。仅仅因为某个人是职业球员并不意味着他们总是以最好的方式做一切事情,对! – JAL

+0

关于几个月的段落可以缩短为甚至'$ month_names [((int)$ date [5]。$ date [6])]'(*给定基于1的月份名称阵列,当然*) – Dan

+0

它只是我,还是长版本会吐出像“9月11日”这样的东西? – Hammerite

回答

2

这里是对原始函数的精确复制。我使用了两个版本,第一个使用strtotime,第二个使用爆炸来避免使用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

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); 
0

为什么我过的strtotime()更喜欢这样的爆炸()ISH解决方案的原因,也就是他们给确定性的,便携的结果不太surprising而strtotime()会做一些复杂的魔法。

0

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