كيفية طرح تاريخين، وتجاهل التوقيت الصيفي بمنطقة PHP؟

StackOverflow https://stackoverflow.com/questions/804571

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أحاول لحساب عدد الأيام بين يومين، ولكن أنا على التوالي في القضايا مع التوقيت الصيفي. وهنا رمز بلادي:

function date_diff($old_date, $new_date) {
    $offset = strtotime($new_date) - strtotime($old_date);
    return $offset/60/60/24;
}

ويعمل بشكل جيد طالما أن الأيام سواء داخل فترة DST نفسها:

echo date_diff('3/15/09', '3/18/09'); // 3

ولكن ليس إذا هم أبعد عن بعضهما البعض:

echo date_diff('11/15/08', '3/18/09'); // 122.95833333333

وأريد حتى عدد من الأيام، ولا يهتمون DST. أعتقد أنني يمكن تقريب النتيجة، ولكن أن يشعر kludgy. هناك (سهل) طريقة أفضل؟ أنا لا أريد أن يكون لكتابة كامل يوم الاعراب و-تجنب العد قفزة سنوات شيء ما اذا كان يمكنني تجنب ذلك.

و(ملاحظة: هذا له لتعمل تحت فب 5.1.6، وحتى بعض من ملامح التاريخ في 5.3 قد لا تكون متوفرة)

وأكثر قليلا من المعلومات: انا ذاهب الى اتخاذ الإزاحة وإضافته إلى datetimes الأخرى التي هي في ديسيبل، وأريد فقط الجزء اليوم للتغيير، وليس الجزء الوقت. تبين التقريب لن تعمل، على أية حال، لأنه عندما أفعل مضيفا أن يحصل إيقاف ساعة واحدة في الاتجاه الآخر. ربما هناك طريقة أفضل للمشكلة برمتها ....

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

المحلول

هل يمكن استخدام http://ca3.php.net/date_default_timezone_set لضبط التوقيت ل GMT ذلك لن يكون هناك أي تعويض.

وبدلا من ذلك، يمكنك إضافة يدويا إزاحة باستخدام date('I',$timetamp)

if ( date("I") == 1 ) {      // "WE ARE MDT";  
        $timeZone = "MDT";  
} else {  
        $timeZone = "MST";  
}  

نصائح أخرى

وفرض مواعيد للعيش في التوقيت دون التوقيت الصيفي، GMT / UTC:

function date_diff($old_date, $new_date) {
  $offset = strtotime($new_date . " UTC") - strtotime($old_date . " UTC");
  return $offset/60/60/24;
}

echo date_diff('3/15/09', '3/18/09'); // 3
echo date_diff('11/15/08', '3/18/09'); // 123

ويمكنك فرض التقريب في اتجاه معين باستخدام floor() أو <وأ href = "HTTP: // php.net/ceil "يختلط =" نوفولو noreferrer "> ceil() .

وحاولت 'بالتوقيت العالمي' رمز أعلاه. did not العمل بالنسبة لي. I ستل حصلت قيم عشرية.

وعندما يكون هناك الصيفي التاريخ ضمن نطاق التاريخ والفرق عشري التسلسلي جزء يكون إما تحت 0.5 أو أكثر. عندما نطاق التاريخ له اليوم توفير الضوء يدور 15/03 القيمة العشرية هي> 0.5 عندما ضوء النهار هو الخروج تاريخ عشري <0.5. لذلك أنا فقط وضعت الفرق المسلسل في وظيفة الجولة () وأحصل على الأعداد الصحيحة ولست بحاجة لعدد من الأيام.

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