PHP में दिनांक समय कक्षा (5.3+) तब तक बहुत बढ़िया काम करती है जब तक कि आपके देश में सप्ताह का पहला दिन रविवार न हो। नीदरलैंड में सप्ताह का पहला दिन सोमवार है और यह सप्ताह के दृश्य और गणना के साथ कैलेंडर बनाने के लिए कक्षा को बेकार बनाता है।PHP डेटटाइम() कक्षा, सप्ताह के पहले दिन सोमवार
मुझे स्टैक ओवरफ्लो या बाकी इंटरनेट पर डेटटाइम कार्य करने का तरीका नहीं लगता है जैसे कि सप्ताह का पहला दिन सोमवार है।
मुझे यह टुकड़ा स्टैक ओवरफ्लो पर मिला, लेकिन यह मुसीबत में आने वाले सभी तरीकों को ठीक नहीं करता है और यह एक सुरुचिपूर्ण समाधान नहीं है।
$dateTime = new DateTime('2012-05-14');
$monday = clone $dateTime->modify(('Sunday' == $dateTime->format('l')) ? 'Monday last week' : 'Monday this week');
क्या इस समय या सीमा दिनांक बदलने के लिए कोई तरीका है? कल्पना नहीं कर सकता कि यह एक सेटिंग नहीं है क्योंकि ज्यादातर यूरोप सोमवार को अपने सप्ताह शुरू करते हैं।
जोड़ा गया: पोस्ट करना पूर्ण कैलेंडर और कार्यों कोड बातें स्पष्ट नहीं होगा। लेकिन उदाहरण के लिए यहां एक पंक्ति है। मुझे अक्सर यह देखना होगा कि सप्ताह का पहला दिन सप्ताह के पहले दिन से उस सप्ताह में एक अलग तिथि और समय पर गणना करता है या नहीं। मेरा कोड इन से भरा हो रहा है:
$startOfWeek = $date->modify(('Sunday' == $date->format('l')) ? 'Monday last week' : 'Monday this week')->modify('+3 hours')->format(DATETIME);
मुझे महीने या वर्ष के पहले पूर्ण सप्ताह को प्राप्त करने का प्रयास करने का एक अवांछित परिणाम भी मिलता है। चूंकि मेरी $ डेट ऑब्जेक्ट में हमेशा एक ही तारीख नहीं होती है, इसलिए मुझे इसे इस तरह से जांचना पड़ता है, जिससे कोड को पढ़ने में मुश्किल होती है। इस कैलेंडर पर करने के लिए बहुत अधिक प्रोग्रामिंग होने के बाद मैं यह नहीं कह सकता कि यह फिर से बग करने जा रहा है।
संपादित वहाँ कुछ विसंगतियां हालांकि रहे हैं। कुछ अजीब कारण के लिए दिनांक समय यह अगले एक सही प्राप्त करता है:
$test = new DateTime('2012-10-29'); // Monday
echo $test->modify('Sunday this week')->format('Y-m-d'); // 2012-11-04
// But...
$test = new DateTime('2012-11-04'); // Sunday
echo $test->modify('Monday this week')->format('Y-m-d'); // 2012-11-05 instead of 2012-10-29
लेकिन मैं मैं सवाल स्पष्ट कर सकते हैं लगता है: दिनांक समय() वर्ग सप्ताह के पहले दिन के रूप में सोमवार से इस्तेमाल किया जा सकता। यदि नहीं, तो कक्षा को सप्ताह के पहले दिन के रूप में सोमवार का उपयोग करने के लिए बढ़ाया जा सकता है।
अद्यतन: ठीक है, मुझे लगता है कि मैंने कहीं हो रही है ... मैं कोडिंग classes..but इस सप्ताह के लिए काम करने के लिए लगता है पर एक समर्थक नहीं हूँ। लेकिन यह अभी भी दिन नाम रविवार खुद के लिए पहले दिन, दूसरे दिन के लिए नियमों की जरूरत है ... और भी। मुझे नहीं लगता कि यह मूर्खतापूर्ण है। मैं इसे ठीक करने में किसी भी मदद की सराहना करता हूं।
class EuroDateTime extends DateTime {
// Fields
private $weekModifiers = array (
'this week',
'next week',
'previous week',
'last week'
);
// Override "modify()"
public function modify($string) {
// Search pattern
$pattern = '/'.implode('|', $this->weekModifiers).'/';
// Change the modifier string if needed
if ($this->format('N') == 7) { // It's Sunday
$matches = array();
if (preg_match($pattern, $string, $matches)) {
$string = str_replace($matches[0], '-7 days '.$matches[0], $string);
}
}
return parent::modify($string);
}
}
// This works
$test = new EuroDateTime('2012-11-04');
echo $test->modify('Monday this week')->format('Y-m-d');
// And I can still concatenate calls like the DateTime class was intended
echo $test->modify('Monday this week')->modify('+3 days')->format('Y-m-d');
आप वास्तव में क्या समस्या का सामना कर रहे हैं? – Jon
एक एक्सवाई समस्या की तरह लगता है। तथ्य यह है कि रविवार को 0 पर मैप किया गया है, आपको किसी अन्य दिन के रूप में सप्ताह की शुरुआत निर्धारित करने के लिए एक अलग तकनीक का उपयोग करने से नहीं रोकना चाहिए। – cmbuckley
आपका प्रश्न सार है। कैलेंडर बनाने के लिए उपयोग किए जाने वाले कोड को प्रदान करें। अभी तक आपके प्रश्न – BeRocket