टाइमज़ोन परेशान कर रहे हैं, इसमें कोई संदेह नहीं है। अगर मैं आपको सही ढंग से समझ रहा हूं, तो आप चाहते हैं कि आपका 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 उस नए टाइमज़ोन को दर्शाने के लिए बदल दिया जाएगा।