سؤال

أحصل على نتائج غير صحيحة باستخدام 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()
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top