2012-01-11 144 views
9

有一個非常簡單的問題。我有一個區域標識符en,en_US,cs_CZ或其他。我只需要獲取該語言環境的日期時間格式。我知道我可以根據語言環境輕鬆地設置任何時間戳或日期對象的格式。但我只需要日期格式的字符串表示形式,比如說一個正則表達式。有沒有管理這個功能的功能?我還沒有發現任何到目前爲止...根據PHP中的語言環境獲取日期格式

Exapmle:

$locale = "en_US"; 
$format = the_function_i_need($locale); 
echo $format; // prints something like "month/day/year, hour:minute" 
+0

我同意@dagon。並設置PHP以遵循UTC將使它更容易。 – ThinkingMonkey 2012-01-11 22:27:02

+1

@Dagon我相信你的評論更準確,你應該把它作爲答案。 – 2012-01-11 22:40:02

回答

2

從註釋轉換:

你將不得不與建設的可能性列表的數組。

http://en.wikipedia.org/wiki/Date_format_by_country應該有所幫助。

發佈功能完成某個地方時,我敢肯定它會派上用場,爲他人

+0

這是建議,但不是答案 – verybadbug 2017-01-21 13:18:48

+0

我被要求回答評論,所以我做了。 – 2017-02-05 06:24:38

0

使用strftime()連同setlocale()。看起來就像你在找什麼。

+0

感謝您的回答,但方式正好相反。如果不是,我不遵循你的想法。你能寫一個簡短的例子嗎? – 2012-01-11 22:30:05

+2

啊,我想我現在明白了。 'strftime()'會轉換輸出的時間和語言,但是對於加拿大的「yyyy-mm-dd」這樣的實際格式,阿爾巴尼亞的「dd/mm/yyyy」相對而言,我相信你將不得不使用Dagon做法。似乎應該有一個功能,這樣做...... – 2012-01-11 22:39:21

2

我試圖做同樣的事情自己。而不是建立一個所有國家的數組,如何使用正則表達式來確定格式?

setlocale(LC_TIME, "us_US"); 

// returns 'mdy' 
$type1 = getDateFormat(); 

setlocale(LC_TIME, "fi_FI"); 

// returns 'dmy' 
$type2 = getDateFormat(); 

setlocale(LC_TIME, "hu_HU"); 

// returns 'ymd' 
$type3 = getDateFormat(); 

/** 
* @return string 
*/ 
function getDateFormat() 
{ 
    $patterns = array(
     '/11\D21\D(1999|99)/', 
     '/21\D11\D(1999|99)/', 
     '/(1999|99)\D11\D21/', 
    ); 
    $replacements = array('mdy', 'dmy', 'ymd'); 

    $date = new \DateTime(); 
    $date->setDate(1999, 11, 21); 

    return preg_replace($patterns, $replacements, strftime('%x', $date->getTimestamp())); 
} 
1
function getDateFormat($locale) 
{ 
    $formatter = new IntlDateFormatter($locale, IntlDateFormatter::SHORT, IntlDateFormatter::NONE); 
    if ($formatter === null) 
     throw new InvalidConfigException(intl_get_error_message()); 

    return $formatter->getPattern(); 
} 

製作舒爾安裝intl

+0

請注意,該日期格式將以ICU格式 – verybadbug 2017-01-21 13:41:01

+0

對我來說,這是最好的答案 - 通用,簡短和工作。儘管這些ICU格式在可能性上似乎很短。我需要像IntlDateFormatter :: SHORT這樣的4位數字和前導0。 – userfuser 2017-05-20 23:24:35

+0

我沒有從手冊中選擇它(它說''中等風格(1952年1月12日)「'),但顯然IntlDateFormatter :: MEDIUM正是我所需要的(前導零,5位數年份) – userfuser 2017-05-21 06:19:38

相關問題