PHP

2012-01-11 6 views
9

में लोकेल के अनुसार दिनांक प्रारूप प्राप्त करें एक बहुत ही सरल समस्या है। मेरे पास लोकेल पहचानकर्ता, एन, एन_यूएस, सीएसआईएनजेड या जो कुछ भी है। मुझे बस उस लोकेल के लिए डेट-टाइम प्रारूप प्राप्त करने की आवश्यकता है। मुझे पता है कि मैं लोकेल के अनुसार किसी भी टाइमस्टैम्प या डेट ऑब्जेक्ट को आसानी से प्रारूपित कर सकता हूं। लेकिन मुझे दिनांक प्रारूप की स्ट्रिंग प्रस्तुति की आवश्यकता है, आइए नियमित अभिव्यक्ति कहें। क्या इस कार्यक्षमता का प्रबंधन करने वाला कोई कार्य है? setlocale() साथ संयोजन के रूप मेंPHP

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

मैं @dagon से सहमत हूं। और यूटीसी का पालन करने के लिए PHP सेट करना इसे अधिक आसान बना देगा। – ThinkingMonkey

+1

@ डैगन मुझे विश्वास है कि आपकी टिप्पणी अधिक सटीक है, आपको इसे एक उत्तर के रूप में रखना चाहिए। –

उत्तर

2

टिप्पणी से परिवर्तित:

आप संभावनाओं की एक सूची के साथ एक सरणी का निर्माण करना होगा।

http://en.wikipedia.org/wiki/Date_format_by_country सहायता चाहिए।

समारोह पोस्ट कहीं जब किया, मुझे यकीन है कि यह दूसरों

+0

यह सलाह है, लेकिन – verybadbug

+0

का जवाब नहीं दिया गया था, मुझे जवाब देने के लिए टिप्पणी करने के लिए कहा गया था, और इसलिए मैंने किया। –

0

उपयोग strftime(): मैं किसी भी अब तक ...

exapmle नहीं मिली है। ऐसा लगता है कि आप यही खोज रहे हैं।

+0

उत्तर के लिए धन्यवाद, लेकिन यह विपरीत तरीका है। यदि नहीं, तो मैं आपके विचार का पालन नहीं करता हूं। क्या आप एक छोटा सा उदाहरण लिख सकते हैं, कृपया? –

+2

आह, मुझे लगता है कि अब मैं समझता हूं। 'strftime() 'आउटपुट के समय और भाषा को परिवर्तित करेगा, लेकिन कनाडा में" yyyy-mm-dd "जैसे वास्तविक प्रारूप के लिए अल्बानिया में" डीडी/एमएम/yyyy "के विरोध में मेरा मानना ​​है कि आपको डैगन का उपयोग करना होगा दृष्टिकोण। ऐसा लगता है कि ऐसा कोई कार्य होना चाहिए जो यह करता है ... –

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(); 
} 

मेक shure आप intl स्थापित करें।

+0

नोट, वह दिनांक पैटर्न आईसीयू प्रारूप – verybadbug

+0

में होगा मेरे लिए यह सबसे अच्छा जवाब है - सार्वभौमिक, लघु और कामकाजी। हालांकि उन आईसीयू प्रारूप संभावनाओं पर बहुत कम लगते हैं। मुझे IntlDateFormatter :: SHORT जैसे 4 अंकों के साथ कुछ और 0s की आवश्यकता होगी। – userfuser

+0

मैंने मैन्युअल रूप से मैन्युअल से इसे नहीं उठाया (यह कहता है "मध्यम शैली (12 जनवरी, 1 9 52)" '), लेकिन स्पष्ट रूप से IntlDateFormatter :: मेडियम केवल वही है जो मुझे चाहिए (अग्रणी शून्य, 5-अंक वर्ष) – userfuser

संबंधित मुद्दे