निम्नलिखित कोड पर विचार करें

$participantTriggerDate = new \DateTime('2019-06-14 09:40:00.000000', new DateTimeZone('US/Central'));
$dateInterval = new \DateInterval('P150D');

$newDate = \DateTimeImmutable::createFromMutable($participantTriggerDate);
$newDate = $newDate->add($dateInterval);

echo(json_encode([
    'participantTriggerDate' => $participantTriggerDate,
    'newDate' => $newDate,
]));

यह कोड निम्न आउटपुट उत्पन्न करता है:

{
  "participantTriggerDate": {
    "date": "2019-06-14 09:40:00.000000",
    "timezone_type": 3,
    "timezone": "US/Central"
  },
  "newDate": {
    "date": "2019-11-11 09:40:00.000000",
    "timezone_type": 3,
    "timezone": "US/Central"
  }
}

हालाँकि, क्योंकि 2019-06-14 के 150 दिन पहले DST सीमा को पार कर जाते हैं, क्या PHP को समय से घटाना और घंटा नहीं करना चाहिए? मैंने सोचा कि PHP ने हुड के नीचे सभी गन्दा डीएसटी सामान का ख्याल रखा है। क्या मेरे पास इस समय की सही गणना करने का कोई तरीका है? मैंने जो पढ़ा है उससे ऐसा लगता है कि अनुशंसित उत्तर सब कुछ यूटीसी में परिवर्तित करना और वहां गणना करना है। यदि संभव हो तो मैं इससे बचना चाहूंगा। मुझे लगा कि PHP यह जानने के लिए काफी स्मार्ट होगा कि जब मैं डेटटाइम निर्माण में टाइमज़ोन पास करता हूं तो एक डीएसटी सीमा पार हो जाती है।

0
Xenology 12 नवम्बर 2019, 00:53

1 उत्तर

सबसे बढ़िया उत्तर

जब आप पूरे दिन जोड़ते हैं, तो PHP दिन के समान समय उत्पन्न करता है, भले ही डीएसटी बदल गया हो। यदि आप यह समायोजन किए बिना समय अंतराल जोड़ना चाहते हैं, तो आपको दिनों के बजाय घंटों को जोड़ना होगा। इसे प्राप्त करने के लिए दिनों की संख्या को 24 से गुणा करें।

$dateInterval = new \DateInterval('PT3600H'); // 3600 = 150*24
2
Barmar 12 नवम्बर 2019, 02:10