2011-07-25 11 views
5

Yii में एक नौसिखिया सवाल पर प्रदर्शित दिनांक स्वरूप बदलने के लिए।Yii: Yii में मैं एक मेज का एक मॉडल है कि एक datetime क्षेत्र होते हैं: कैसे देखें

एस एस कैसे कर सकता है:

मैं CActiveForm उपयोग कर रहा हूँ इस क्षेत्र को प्रदर्शित करने के लिए:

<div class="row"> 
    <?php echo $form->labelEx($model,'createdon'); ?> 
    <?php echo $form->textField($model,'createdon', array('id'=>'createdon')); ?> 
    <?php echo $form->error($model,'createdon'); ?> 
</div> 

लेकिन पाठ फ़ील्ड प्रदर्शित किया datetime प्रारूप MySQL से आते हैं जो yyyy-mm-dd hh है पर है: मिमी मैं टेक्स्टफील्ड पर प्रदर्शित प्रारूप को एक अलग समय प्रारूप में बदलता हूं? (शायद डीडी/एमएम/वाई या मिमी/डीडी/वाई या अन्य)

किसी भी मदद की सराहना की जाएगी।

धन्यवाद!

उत्तर

26

आप तारीख एक प्रारूप में संग्रहीत है, लेकिन किसी अन्य स्वरूप में दिखाया गया है (अर्थात ऐसे कई दृश्य) चाहते हैं, तो मॉडल में इसे बदलने पर विचार।

उदाहरण के लिए:

class Whatever extends CActiveRecord  
{ 
    protected function afterFind() 
    { 
      // convert to display format 
     $this->createdon = strtotime ($this->createdon); 
     $this->createdon = date ('m/d/Y', $this->createdon); 

     parent::afterFind(); 
    } 

    protected function beforeValidate() 
    { 
      // convert to storage format 
     $this->createdon = strtotime ($this->createdon); 
     $this->createdon = date ('Y-m-d', $this->createdon); 

     return parent::beforeValidate(); 
    } 
} 

कौन सा तरीकों आप ओवरराइड आप क्या हासिल करने की कोशिश कर रहे हैं पर निर्भर करता है।

From the docs:

  1. अनुकूलन CActiveRecord कुछ प्लेसहोल्डर तरीकों कि अपनी कार्यप्रवाह अनुकूलित करने के लिए बच्चे कक्षाओं में अधिरोहित जा सकता है प्रदान करता है।
    • पहले वैलिडेट और बाद में वैध: सत्यापन से पहले और बाद में इन्हें बुलाया जाता है।
    • पहले सेव करें और बाद में सहेजें: एआर इंस्टेंस को सहेजने से पहले और बाद में इन्हें पर बुलाया जाता है।
    • beforeDelete और afterDelete: इन पहले और बाद में एक एआर उदाहरण हटा दी जाती है लागू कर रहे हैं।
    • कंसस्ट्रक्ट के बाद: यह नए ऑपरेटर का उपयोग करके बनाए गए प्रत्येक एआर इंस्टेंस के लिए आमंत्रित किया जाता है।
    • beforeFind: पहले एक एआर खोजक एक प्रश्न प्रदर्शन करने के लिए प्रयोग किया जाता है इस शुरू हो जाती है (उदाहरण के लिए लगता है(), findAll())।
    • बाद के बाद: यह क्वेरी के परिणामस्वरूप बनाए गए प्रत्येक एआर इंस्टेंस के बाद लागू किया गया है।
+0

हे ... धन्यवाद, बाद के बाद() विधि वह है जिसे मैं ढूंढ रहा था :) – Calua

1

आपको बस CDateFormatter उपयोग करने के लिए है और यह विधि format

है या आप फ़ंक्शन का उपयोग date

मुझे लगता है कि स्वरूपण विकल्प पर PHP के मैनुअल में उदाहरण के बहुत सारे (हैं प्रारूप तारीख के मूल निवासी पीएचपी की तरह इस्तेमाल कर सकते हैं साथ ही साथ प्रत्येक प्रारूप संशोधक का अर्थ क्या है), इसलिए चीजों को समझने में कोई समस्या नहीं होगी, लेकिन यदि आपको वाईआई के CDateFormatter के साथ कोई समस्या है, तो मैं आपको कुछ उदाहरण दे सकता हूं।

+0

जहां मैंने पहले मूल्य से प्रारूप चाहिए फार्म पर इसे प्रदर्शित किया? क्या मैं इस तरह कुछ उपयोग कर सकता हूं: टेक्स्टफ़िल्ल्ड ($ मॉडल, दिनांक ('डी-एम-वाई', 'बनाया गया'), सरणी ('आईडी' => 'बनाया गया')); ?> ?? या क्या yii मॉडल पर कोई घटना या व्यवहार है जहां मैं इसे कर सकता हूं? – Calua

+0

मूल रूप से आप चाहते हैं कि आपकी तिथि लोकेल के कारण स्वरूपित हो (आप ['CLocale'] (http://www.yiiframework.com/doc/api/1.1/CLocale) का उपयोग करके लोकेल सेट कर सकते हैं)। मैं अपने दृश्य में 'सीडीएफ़फॉर्मेटर' पास करता हूं - इससे मुझे बहुत परेशान नहीं होता है। यदि आपकी परियोजना आपके क्षेत्र के लिए स्थानीयकृत है और आप इसे अन्य क्षेत्रों में स्थानांतरित करने पर विचार नहीं करते हैं, तो आप 'तारीख ('डीएम-वाई', ) के साथ जा सकते हैं '(Yii बस आपको एक टूल प्रदान करता है - इसका उपयोग करने के लिए या नहीं आपकी पसंद का मामला है)। अन्यथा ['CLocale'] के साथ [' CDateFormatter'] का उपयोग करना अधिक सुविधाजनक है। – Nemoden

+0

"या क्या yii मॉडल पर कोई घटना या व्यवहार है जहां मैं इसे कर सकता हूं?"। मैंने नहीं किया, लेकिन मुझे लगता है कि आप एक व्यवहार संलग्न कर सकते हैं। – Nemoden

3

यह मेरे लिए काम किया:

class SomeClass extends CActiveRecord 
{ 

    protected function afterFind() 
    { 
     // convert to display format 
     $this->my_date_time = DateTime::createFromFormat('Y-m-d H:i:s', $this->my_date_time)->format('d-m-Y'); 

     parent::afterFind(); 
    } 

    protected function beforeSave() 
    { 
     // convert to storage format 
     $this->my_date_time = DateTime::createFromFormat('d-m-Y', $this->my_date_time)->format('Y-m-d H:i:s'); 

     return parent::beforeSave(); 
    } 
}