2015-04-30 41 views
1

PHP是如此精良,我想知道是否有我需要的功能。PHP人類的日期範圍/持續時間格式

對於持續一天以上的事件,格式化人的方式非常複雜。

Exemples ...

事件之一:從二零一五年四月二十零日至2015年4月22日可能被格式化爲這樣的人:4月20-22日2015年

事件二:從2015 - 04-01至2015年5月31日人類 - >四月至2015年5月

事件三:2015年4月30日至2015年5月2日人類 - > 4月30日至5月2日到2015年

總之,不要重複不需要重複的事情。儘可能與「 - 」鏈接。

它必須進行本地化,格式可能會根據當地情況而變化。例如,美國人像MonthName DayNumber Year,但法國人像DayNumber MonthName Year。

我打算編程這樣的格式,但我想知道,如果它已經存在:)

+2

我不認爲你可以做這樣的事情,沒有一點工作。不過,本地DateTime類將完成大部分閱讀日期併爲您設置格式的工作! – Morgan

+2

實際上日期格式看起來很隨意。人們不一定知道「2015年4月至5月」意味着4月1日至5月31日。爲什麼不更具體,併爲所有間隔使用相同的格式。 –

+0

你以爲!人類填補你知道的空白。他們非常清楚這次活動將在4月和5月舉行。人類也喜歡短而直觀的格式。像2015-04-01到2015-05-31這樣的格式比2015年4月到5月更長,難以理解和評估。恕我直言 –

回答

2

這工作...

function humanDateRanges($start, $end){ 
    $startTime=strtotime($start); 
    $endTime=strtotime($end); 

    if(date('Y',$startTime)!=date('Y',$endTime)){ 
     echo date('F j, Y',$startTime) . " to " . date('F j, Y',$endTime); 
    }else{ 
     if((date('j',$startTime)==1)&&(date('j',$endTime)==date('t',$endTime))){ 
      echo date('F',$startTime) . " to " . date('F, Y',$endTime); 
     }else{ 
      if(date('m',$startTime)!=date('m',$endTime)){ 
       echo date('F j',$startTime) . " to " . date('F j, Y',$endTime); 
      }else{ 
       echo date('F j',$startTime) . " to " . date('j, Y',$endTime); 
      } 
     } 
    } 
} 

humanDateRanges("2015-04-20", "2015-04-22"); 
//April 20 to 22, 2015 
humanDateRanges("2015-04-01", "2015-05-31"); 
//April to May, 2015 
humanDateRanges("2015-04-30", "2015-05-02"); 
//April 30 to May 2, 2015 
humanDateRanges("2014-05-02", "2015-05-02"); 
//May 2, 2014 to May 2, 2015 

但我認爲在某些情況下,甚至人類需要被告知4月 - 5月將開始第一場比賽並且在第31場結束。

+0

+1太棒了!你可以改用「n」來進行月份比較。此外,我需要想出一個方法來本地化:) –

+0

本地化它,用strftime()替換所有的date()函數,格式化選項與'%Y'有所不同,而不僅僅是'Y'但它是一樣的,你可以在該函數的頂部設置區域設置。只要將它作爲另一個變量傳遞並設置即可。你也應該回來的結果,沒有迴應他們,我認爲這將是更有用的,這只是一個快速刺傷它。 http://us2.php.net/manual/en/function.strftime.php – RightClick

0

萬一別人絆倒在這樣的:我已經寫了嘗試的方式,還與國際化來解決這個問題,一個小型圖書館:

https://github.com/flack/ranger

應該提供合理的默認對於ltr語言(和rtl支持不應該太難添加)