Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

Laravel Eloquent द्वारा प्रबंधित टाइमस्टैम्प (created_at और update_at) के लिए टाइमज़ोन को कैसे अपडेट करें?

मुझे पता है कि यह प्रश्न थोड़ा पुराना है, लेकिन जब मैं एक ही समाधान के साथ आने की कोशिश कर रहा था, तो मैं इस पर ठोकर खाई, और यह साझा करना चाहता था कि मैंने इसे कैसे हल किया।

मेरी सलाह होगी कि संदेशों को संग्रहीत करने के समय क्षेत्र को न बदलें। उन्हें डेटाबेस में UTC के रूप में संग्रहीत करें। अपने भंडारण को संदर्भ के एक निरंतर फ्रेम में सेट करना और फिर इसे प्रदर्शित करने के लिए आपको जिस भी समय क्षेत्र की आवश्यकता है उसे परिवर्तित करना आपको लंबे समय में सिरदर्द के भार से बचाएगा।

उन सिरदर्दों में से एक के उदाहरण के रूप में, कल्पना करें कि दो लोग अलग-अलग समय क्षेत्रों में एक बैठक के समय को समन्वयित करने का प्रयास कर रहे हैं जहां एक डीएसटी देखता है और एक नहीं करता है और आपको प्रत्येक उपयोगकर्ता के स्थानीय समय में समय प्रदर्शित करने की आवश्यकता होती है। अपने संग्रहीत पीडीटी समय को अमेरिका/केमैन (जो डीएसटी का पालन नहीं करता है) कहने के लिए कितना मुश्किल होगा? और जब पीएसटी बनाम पीडीटी में समय संग्रहीत किया जाता है तो आप कैसे ध्यान रखेंगे? आप कैसे जानते हैं? (संकेत:उस एक प्रश्न का उत्तर देने के लिए शायद अतिरिक्त कोड की सैकड़ों पंक्तियों के बिना, आप नहीं करेंगे )।

सही समय क्षेत्र में समय निकालने के लिए, बस मॉडल पर ही एक म्यूटेटर फ़ंक्शन जोड़ें:

use Carbon\Carbon;

class MyModel extends Eloquent
{
    public function getCreatedAtAttribute($value)
    {
        return Carbon::createFromTimestamp(strtotime($value))
            ->timezone('America/Los_Angeles')
            ->toDateTimeString()
        ;
    }
}

अब, जब भी आप $myModel->created_at . करते हैं यह जादुई रूप से सही समय क्षेत्र में परिवर्तित हो जाएगा, लेकिन आप अभी भी यूटीसी को अपने डेटाबेस में रखते हैं जो निश्चित रूप से लगातार भंडारण के लिए अन्य समय क्षेत्रों पर इसके लाभ हैं।

उपयोगकर्ताओं को अपना समय क्षेत्र सेट करने देना चाहते हैं? फ़ंक्शन को इसमें बदलें:

public function getCreatedAtAttribute($value)
{
    $user = Auth::user();
    // If no user is logged in, we'll just default to the 
    // application's timezone
    $timezone = $user ? $user->timezone : Config::get('app.timezone');

    return Carbon::createFromTimestamp(strtotime($value))
        ->timezone($timezone)
        // Leave this part off if you want to keep the property as 
        // a Carbon object rather than always just returning a string
        ->toDateTimeString()
    ;
}

और समय क्षेत्र बदलने की सारी जटिलता, दिन के उजाले की बचत को ध्यान में रखना या न करना आप से दूर है और आप भूल सकते हैं कि यह होना ही है।

लारवेल म्यूटेटर्स / एक्सेसर्स के बारे में अधिक जानकारी के लिए, दस्तावेज़ीकरण देखें। ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आप mysql2 मणि ​​के साथ तैयार बयान कैसे बनाते हैं?

  2. MySQL:क्या MySQL तालिका में प्रत्येक रिकॉर्ड के लिए आंतरिक रिकॉर्ड पहचानकर्ता जैसा कुछ है?

  3. MySQL वर्कबेंच के साथ विदेशी कुंजी जोड़ते समय MySQL त्रुटि 1064

  4. date_format के साथ mysql तारीख की तुलना

  5. कई कॉलम अपडेट करने के लिए MySQL केस