2009-07-11 6 views
15

तिथि समारोह उत्पादन मैं इतालवी प्रारूप इस प्रकार है date() का उपयोग करने में उत्पादन तिथियों के लिए कोशिश कर रहा हूँ:PHP में इतालवी

<?php 
    setlocale(LC_ALL, 'it_IT'); 
    echo date("D d M Y", $row['eventtime']); 
?> 

हालांकि, यह अभी भी अंग्रेजी प्रारूप में बाहर आ रहा है। इसके अलावा मेरे द्वारा और क्या किया जा सकता है? क्या वहाँ कुछ गड़बड़ है?

समाधान स्क्रिप्ट विशिष्ट और नहीं सर्वर विस्तृत हो गया है ...

धन्यवाद

शादी

उत्तर

39

date() लोकेल-जागरूक नहीं है। अन्य भाषाओं में

प्रारूप दिनांकों करने के लिए, आप date() के बजाय setlocale() और strftime() कार्यों का उपयोग करना चाहिए: आप (date() पीएचपी मैनुअल से) उत्पादन स्थान-अवगत दिनांकों को strftime() और उसके प्रारूप विनिर्देशक का उपयोग करना चाहिए।

Anti Veeranna की टिप्पणी के बारे में

: वह बिल्कुल सही है, जब से तुम स्थानों की स्थापना के रूप में वे कभी कभी वर्तमान स्क्रिप्ट दायरे तक सीमित नहीं हैं के साथ बहुत सावधान रहना होगा। सबसे अच्छा तरीका होगा:

$oldLocale = setlocale(LC_TIME, 'it_IT'); 
echo utf8_encode(strftime("%a %d %b %Y", $row['eventtime'])); 
setlocale(LC_TIME, $oldLocale); 
+0

परफेक्ट, यह काम करता है :) –

+3

ध्यान रखें कि सेटलोकेल स्क्रिप्ट विशिष्ट नहीं है, यह थ्रेड विशिष्ट है, इसलिए यह संभव है कि लोकेल 'नीचे' बदल जाए। http://ee.php.net/setlocale इसे भी समझाता है। –

+0

यह केवल थ्रेड विशिष्ट नहीं है, यह प्रक्रिया विशिष्ट है। तो आप भी अन्य चल रहे PHP उदाहरणों को बदल सकते हैं। (Http://www.php.net/manual/en/function.setlocale.php#refsect1-function.setlocale-notes) – apfelbox

2
+0

मैं यहाँ अपने समाधान का प्रयोग किया: inmaremma.net बस ऐसे ही लहजे वर्ण प्रश्न चिह्न के रूप में प्रदान की जाती हैं। मेरा मानना ​​है कि मैं सही ढंग से एचटीएमएल भाषा को इतालवी में –

+0

@AdiCumpanasu के साथ सेट कर दूंगा, आपको संभवतः यूआरएफ -8 में वर्णमाला सेट करने की भी आवश्यकता होगी। '' और '' के बीच निम्नलिखित रखें: 'मेटा charset =" utf-8 ">'। – Sampson

+0

ने इसे इस तरह लपेटकर हल किया: utf8_encode (strftime ("% ए% डी% बी% वाई") –

3

it_IT स्थान स्थापित होने के लिए/अपने सर्वर व्यवस्थापक द्वारा सक्षम किया गया है, अन्यथा यह काम नहीं करेगा।

तो, जोनाथन का समाधान शायद सबसे अच्छा है।

+0

मेरे पास सर्वर तक पूर्ण पहुंच है, कोई विचार जहां मैं जांच सकता हूं कि कौन से स्थानीय स्थापित हैं? –

+0

'लोकेल-ए' टाइप करके यदि वह सर्वर लिनक्स/बीएसडी के कुछ संस्करण चला रहा है। –

2

मैंने पाया कि setlocale के रूप में यह (मैनुअल में यह उल्लेख है) धागा प्रति नहीं, प्रक्रिया के आधार पर तय किया जाता है, विश्वसनीय नहीं है। इसका मतलब है कि अन्य चल रही स्क्रिप्ट किसी भी समय लोकेल को बदल सकती हैं। एक समाधान intl PHP विस्तार से IntlDateFormatter का उपयोग कर रहा है।

$fmt = new \IntlDateFormatter('it_IT', NULL, NULL); 
$fmt->setPattern('d MMMM yyyy HH:mm'); 
// See: http://userguide.icu-project.org/formatparse/datetime for pattern syntax 
echo $fmt->format(new \DateTime()); 

यह करने के लिए आप की आवश्यकता हो सकती काम नहीं करता है:

  • स्थापित intl php एक्सटेंशन (ubuntu उदाहरण): sudo apt-get install php5-intl

  • स्थान का उपयोग करना चाहते स्थापित करें: sudo locale-gen it_IT

0

एक के बारे में http://www.phpnews.it/articoli/ottenere-date-in-italiano/response पर rticle, ब्लॉग एक वैकल्पिक पद्धति का सुझाव है, लेकिन कोड काम नहीं कर रहा है, यहाँ सही कोड है:

function timestamp_to_date_italian($date) 
    {  
     $months = array(
       '01' => 'Gennaio', 
       '02' => 'Febbraio', 
       '03' => 'Marzo', 
       '04' => 'Aprile', 
       '05' => 'Maggio', 
       '06' => 'Giugno', 
       '07' => 'Luglio', 
       '08' => 'Agosto', 
       '09' => 'Settembre', 
       '10' => 'Ottobre', 
       '11' => 'Novembre', 
       '12' => 'Dicembre'); 

     list($day, $month, $year) = explode('-',date('d-m-Y', $date));  
     return $day . ' ' . $months[$month] . ' ' . $year; 

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