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

PHP और MySQL में टाइमज़ोन से निपटना

टाइमज़ोन परेशान कर रहे हैं, इसमें कोई संदेह नहीं है। अगर मैं आपको सही ढंग से समझ रहा हूं, तो आप चाहते हैं कि आपका PHP उस दृश्य में समय लौटाए जो उपयोगकर्ता के लिए सही क्षेत्र में है, है ना?

मैं जो करता हूं वह 'मास्टर व्यू' या किसी प्रकार या ब्लेड.php फ़ाइल के भीतर होता है जिसे कम से कम एक बार लोड होने की गारंटी दी जाती है, मैं जांचता हूं कि इस उपयोगकर्ता का टाइमज़ोन सत्र चर में संग्रहीत है या नहीं। यदि ऐसा नहीं है, तो मैं टाइमज़ोन का नाम संग्रहीत करने के लिए सर्वर को एक AJAX अनुरोध भेजता हूं।

{{-- store timezone in session variables --}}
@if (!Session::has('timezone'))
    <script>
        $(function () {
            var tz = jstz.determine();
            var data = {};
            if (typeof (tz) !== 'undefined') {
                data.timezone = tz.name();
            }
            if (!$.isEmptyObject(data)) {
                $.ajax({
                    type: "POST",
                    url: "{{ url('/api/v1/settings') }}",
                    beforeSend: function (request) {
                        request.setRequestHeader("X-CSRF-TOKEN", "{{ csrf_token() }}");
                    },
                    data: $.param(data),
                });
            }
        });
    </script>
@endif

ध्यान दें कि यह दृष्टिकोण jstz पैकेज का उपयोग करता है, जिसे आप यहां डाउनलोड कर सकते हैं और अपने <head> . में शामिल करें अनुभाग।

बेशक आपको इस अनुरोध के लिए मार्ग सेट करना होगा, मेरे मामले के लिए, यह इस तरह दिखता है:

Route::post('api/v1/settings', function () {
    // Save the user's timezone
    if (Request::has('timezone')) {
        Session::put('timezone', Request::get('timezone'));
    }
});

अब, जब आप दिए गए डेटाबेस डेटाटाइम स्ट्रिंग्स को सही टाइमज़ोन में कनवर्ट करना चाहते हैं, तो आप $tz = $request->session()->get('timezone') कहकर टाइमज़ोन प्राप्त कर सकते हैं। और फिर दिनांकों को Carbon\Carbon::parse($date, $tz); के साथ पार्स करें

आम तौर पर, मैं अनुशंसा करता हूं कि आप यूटीसी प्रारूप में सभी तिथियों को संग्रहीत करने के साथ रहें, क्योंकि यह मानक है और यह अनिवार्य है कि डेटाबेस टाइमज़ोन अज्ञेयवादी बने रहे। लेकिन अगर आप डिफ़ॉल्ट बदलना चाहते हैं, तो आप 'timezone' => 'UTC' लाइन को एडिट कर सकते हैं। config/app.php . में . यह उस क्षेत्र को अधिलेखित कर देगा जिसमें Laravel अपने टाइमस्टैम्प को डिफॉल्ट करता है, इसलिए आपका create_at, update_at उस नए टाइमज़ोन को दर्शाने के लिए बदल दिया जाएगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में एक स्ट्रिंग भाग द्वारा ग्रुप कैसे करें

  2. वैकल्पिक तालिका त्रुटि

  3. Percona XtraDB क्लस्टर के लिए ProxySQL के साथ लोड संतुलन

  4. POST के कच्चे डेटा को लॉग करने के लिए PHP स्क्रिप्ट

  5. हम क्लॉज में स्टोर प्रक्रिया को कैसे कॉल कर सकते हैं