যদিও @drrcknlsn দৃ as়ভাবে ডায়াটিমে টাইম স্ট্রিং রূপান্তর করার জন্য একাধিক উপায় রয়েছে তা বোঝার জন্য এটি গুরুত্বপূর্ণ যে এই বিভিন্ন উপায়ে একইভাবে টাইমজোনগুলির সাথে কাজ করে না।
বিকল্প 1 : DateTime('@' . $timestamp)
নিম্নলিখিত কোড বিবেচনা করুন:
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
strtotime
বিট ঘটিয়েছে সময় অঞ্চল তথ্য, এবং date_create
ফাংশন জিএমটি অনুমান ( Europe/Brussels
)।
এই হিসাবে, আউটপুটটি নিম্নলিখিত হবে, আমি এটি কোন সার্ভারে চালিত করি তা নয়:
2011-12-12T13:17:52+00:00
বিকল্প 2: date_create()->setTimestamp($timestamp)
নিম্নলিখিত কোড বিবেচনা করুন:
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
আপনি এটি একই আউটপুট উত্পাদন আশা করতে পারেন। তবে, যদি আমি এই কোডটি বেলজিয়ামের একটি সার্ভার থেকে সম্পাদন করি তবে আমি নিম্নলিখিত আউটপুটটি পাই:
2011-12-12T14:17:52+01:00
date_create
ফাংশনের বিপরীতে , setTimestamp
পদ্ধতিটি 'Europe/Brussels'
GMT এর পরিবর্তে সার্ভারের সময় অঞ্চল ( আমার ক্ষেত্রে) ধরে নেয় ।
স্পষ্টভাবে আপনার সময় অঞ্চল নির্ধারণ
আপনি যদি নিশ্চিত করতে চান যে আপনার আউটপুটটি আপনার ইনপুটটির টাইম জোনের সাথে মিলে যায়, তবে এটি সুস্পষ্টভাবে সেট করা ভাল।
নিম্নলিখিত কোড বিবেচনা করুন:
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
এখন, নিম্নলিখিত কোডটিও বিবেচনা করুন:
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
ইনপুটটির সাথে মিলে যাওয়ার জন্য আমরা আউটপুটটির সময় অঞ্চলটি স্পষ্টভাবে সেট করেছি বলে, উভয়ই একই (সঠিক) আউটপুট তৈরি করবে:
2011-12-12T21:17:52+08:00