يقوم تنسيق PHP IntlDateFormatter بإرجاع تاريخ خاطئ
سؤال
أحصل على نتائج غير صحيحة باستخدام IntlDateFormatter:
$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE
);
$a = date('Y/m/d H:i:s',1332712800); //2012/03/26 00:00:00
$b = $dateFormater->format(1332712800); //March 25, 2012
ولكن هذا يحدث فقط للتواريخ بين 2012/03/26 و2012/10/28 وبدون ساعة (00:00:00).
لا أستطيع معرفة ما هي المشكلة.
شكرا للمساعدة.
المحلول
http://userguide.icu-project.org/datetime/timezone#TOC-Factory-Methods-and-the-Default-Tim يقول
TimeZone
يحتفظ بكائن المنطقة الزمنية الثابتة المعروف باسم المنطقة الزمنية الافتراضية.هذه هي المنطقة الزمنية التي يتم استخدامها ضمنيًا عندما لا يحدد المستخدم منطقة زمنية.تحاول ICU مطابقة ذلك مع المنطقة الزمنية لنظام التشغيل المضيف.
باختصار، إذا كنت ترغب في تغيير المنطقة الزمنية الافتراضية من الدولي لمطابقة ما date()
يقول، يجب عليك تغيير المنطقة الزمنية على نظام التشغيل الخاص بك.لكن لا تفعل ذلك.
يفضل أن تحدد المنطقة الزمنية في المكالمة IntlDateFormatter::create()
.إذا كنت ترغب في استخدام المنطقة الزمنية الافتراضية التي تستخدمها PHP في مكان آخر، فيمكن استرجاعها باستخدام date_default_timezone_get()
.
$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE,
date_default_timezone_get()
);