سؤال

أواجه بعض المشاكل مع وظيفة MKTime. على خادم الإنتاج الخاص بي، إذا قمت بتنفيذ ما يلي:

echo '<p>' . mktime(24, 0,0, 8,29,2009) . ' - 12pm</p>';
echo '<p>' . mktime(23, 0,0, 8,29,2009) . ' - 11pm</p>';
echo '<p>' . mktime(22, 0,0, 8,29,2009) . ' - 10pm</p>';

ثم قم بتحويل تلك الطوابع الزمنية إلى تنسيق قابل للقراءة (باستخدام www.unixtimestamp.com. للحصول على تحويل سريع)، تكون الأوقات من ساعة واحدة. لقد اعتقدت أصلا أن هذه كانت مشكلة مع 2400 مقابل 0000، لكن ذلك لن يمرص لوجود التواريخ الأخرى.

أيه أفكار؟

هل كانت مفيدة؟

المحلول

الخادم الخاص بك لديه منطقة زمنية مختلفة مما تتوقع. يتم قياس الطابع الزمني يونيكس بالثواني منذ 1.1.1970 00:00:00 بتوقيت غرينيتش, ، لذلك لديك تحويل المنطقة الزمنية المخفية في التعليمات البرمجية الخاصة بك. يمكنك إما

نصائح أخرى

لقد ركضت ما يلي من سطر الأوامر وحصلت على الإخراج التالي (المتوقع). ماذا يحدث إذا قمت بتشغيلها؟

$ php -r "echo date('H:i:s Y-m-d', mktime(24, 0, 0, 8, 29, 2009));"
00:00:00 2009-08-30

$ php -r "echo date('H:i:s Y-m-d', mktime(23, 0, 0, 8, 29, 2009));"
23:00:00 2009-08-29

$ php -r "echo date('H:i:s Y-m-d', mktime(22, 0, 0, 8, 29, 2009));"
22:00:00 2009-08-29

مشكلتي كانت في mktime أنا مدخل اليوم والشهر مع الأصفار البادئة. وبعد من وظيفة عاد لي نتائج خاطئة. سيكون أحد الخيارات لإزالة الصفر الرئيسي مع وظيفة مثل

$str = ltrim($str, '0');

مصدر: كيفية إزالة جميع الأصفار الرائدة في سلسلة

أو

$var = (int)$var;

مصدر: PHP إزالة الأصفار الأولى

لقد استخدمت إمكانية واحدة من Soulmerge:

$date = new DateTime($year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $minute . ':' . $seconds);
$match_time = $date->getTimestamp();

ولكن يجب أن يتم تحديد الوقت دائما (إما مع date_default_timezone_set() أو مباشرة مع DateTime.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top