दिलचस्प पोस्ट
पृष्ठभूमि-रंग की अस्पष्टता, लेकिन पाठ नहीं लूपर थ्रेड कैसे बनाएं, फिर उसे तत्काल संदेश भेजें? क्या $ मिलियन का एक संस्करण है जो कॉल वापस उपयोग नहीं करता है? क्या स्तंभ क्रमिक स्थिति का उपयोग करके एसक्यूएल सर्वर डेटा का चयन करना संभव है आईओएस 6: मैं कुछ दृश्यों को चित्रित करने और दूसरों को घुमाने के लिए कैसे रोकूं? बस अपने ओएस एक्स को योसेमाइट से उन्नत किया गया, एंड्रॉइड डिवाइस चयनकर्ता डिवाइस नहीं दिखा रहा है – क्या करना है? मैं एक सप्ताह से अधिक पुराने ट्वीट्स कैसे प्राप्त कर सकता हूं (ट्वीपी या अन्य अजगर लाइब्रेरी का उपयोग करके) क्या एक्सेन्ट से छुटकारा पाने के लिए और पूरी स्ट्रिंग को नियमित अक्षरों में बदलने का एक तरीका है? MVC4 में ब्राउजर बैक बटन क्लिक ब्राउजर कैश कैसे साफ़ करें? एंड्रॉइड स्टूडियो 1.4 में content_main.xml की भूमिका क्या है? लिंक पर लिंक किए गए पृष्ठ के एक छोटे से पॉपअप में लाइव पूर्वावलोकन कैसे दिखाएं? PostgreSQL में यूपीएसईआरटी (एमर्ज, INSERT … डुप्लिकेट अपडेट पर) कैसे करें? EditText में टेक्स्ट के अंत में कर्सर रखें जावा में मिक्सिन लागू करें? एंड्रॉइड में पगनेटिंग टेक्स्ट

पैचिंग / बचत करने पर दिनांक / समय मानों का गलत अर्थ क्यों है?

मैं एक केकपीप 3 फॉर्म से डेटा को सहेजने का प्रयास करता हूं। सभी डेटा अच्छी तरह से सहेजे गए हैं लेकिन डेट-टाइम नहीं हैं मेरे पास 2 दिन समय फ़ील्ड है उन फ़ील्ड्स jquery-ui विजेट से भरे हुए हैं

समस्या तब होती है जब अनुबंध इकाई

$intervention = $this->Interventions->patchEntity($intervention, $this->request->data); 
  • $ की डिबग-> अनुरोध-> डेटा:

     'user_id' => '1', 'description' => 'test', 'starttime' => '2015/11/15 10:00', 'endtime' => '2015/11/15 12:10' 
  • मेरे ऑब्जेक्ट के डीबग $ pacthEntity के बाद हस्तक्षेप:

वस्तु (एप्लिकेशन \ मॉडल \ इकाई \ हस्तक्षेप)

 'id' => (int) 3, 'user_id' => (int) 1, 'description' => 'test', 'starttime' => null, 'endtime' => null ... 

शुरुआत और समाप्ति समय शून्य हो जाता है और मुझे समझ में नहीं आता कि क्यों

क्या किसी के पास पहले यह पीबी था?

मैंने कोशिश की है (डीबगिंग और समझने के लिए) खेतों के मूल्यों को बल देने के लिए afer patching और mysql में datetime फ़ील्ड ठीक हैं।

 $intervention->starttime = date('Ymd H:i:s', strtotime($this->request->data['starttime'])); $intervention->endtime = date('Ymd H:i:s', strtotime($this->request->data['endtime'])); 

मदद के लिए धन्यवाद

Solutions Collecting From Web of "पैचिंग / बचत करने पर दिनांक / समय मानों का गलत अर्थ क्यों है?"

एक लोकेल जागरूकता फैशन में तारीख / समय के मूल्यों को जाली / पार्स किया जा रहा है


अपडेट: 3.2.5 से पहले CakePHP एप्लिकेशन टेम्प्लेट संस्करणों के साथ यह डिफ़ॉल्ट व्यवहार है। 3.2.5 के रूप में लोकेल पार्सिंग अब डिफ़ॉल्ट रूप से सक्षम नहीं है, जिससे पार्सर को Ymd H:i:s डिफ़ॉल्ट की आवश्यकता होगी Ymd H:i:s इसके बजाय।


मार्शलिंग प्रक्रिया में, संबंधित कॉलम प्रकारों के अनुसार मूल्यों को "जाली" किया जा रहा है। DATETIME स्तंभों के लिए, यह \Cake\Database\Type\DateTimeType type class द्वारा किया जाता है

सटीक होने के लिए, यह \Cake\Database\Type\DateTimeType::marshall()

डिफ़ॉल्ट ऐप टेम्पलेट कॉन्फ़िगरेशन के साथ, DateTypeType को लोकेल जागरूक पार्सिंग का उपयोग करने के लिए कॉन्फ़िगर किया गया है, और चूंकि कोई डिफ़ॉल्ट लोकेल प्रारूप सेट नहीं किया जा रहा है, \Cake\I18n\Time::parseDateTime() मूल्यों को इसके डिफ़ॉल्ट "स्ट्रिंग फ़ॉर्मेट" के अनुसार पार्स करेगा ( Time::$_toStringFormat ), जो लोकेल के बारे में जागरूक है [IntlDateFormatter::SHORT, IntlDateFormatter::SHORT]

इसलिए, उदाहरण के लिए यदि आपके स्थान को en_US सेट किया गया है, तो मान को M/d/yy, h:mm a अपेक्षित स्वरूप के साथ पार्स किया जाएगा, जो कि आपका मान फिट नहीं होगा, और इसलिए आप अंत में समाप्त हो जाएंगे इकाई की संपत्ति के लिए null होने के साथ

पार्सर्स को उचित प्रारूप का उपयोग करें

tl; डॉ

यदि आपके ऐप में हर जगह jQuery विजेट का प्रारूप उपयोग नहीं किया जा रहा है, तो आप उदाहरण के लिए अस्थायी रूप से उचित लोकेल प्रारूप को सेट कर सकते हैं या लोकेल पार्सिंग को अक्षम कर सकते हैं

 $dateTimeType = Type::build('datetime')->setLocaleFormat('yyyy/MM/dd HH:mm'); // ... $intervention = $this->Interventions->patchEntity($intervention, $this->request->data); // ... $dateTimeType->setLocaleFormat(null); 

या

 $dateTimeType = Type::build('datetime')->useLocaleParser(false); // ... $intervention = $this->Interventions->patchEntity($intervention, $this->request->data); // ... $dateTimeType->useLocaleParser(true); 

यह ध्यान दिया जाना चाहिए कि यह सभी दिनांक / समय इनपुट को प्रभावित करेगा, न कि केवल आपके starttime और endtime क्षेत्र!

क्या दूसरी ओर jQuery विजेट द्वारा उपयोग किया जाने वाला प्रारूप प्रारूप होना चाहिए, जिसे आप अपने ऐप के माध्यम से सभी तरह से उपयोग करना चाहते हैं, फिर डिफ़ॉल्ट स्वरूप को बदलना भी ऐसा कर सकता है

 use Cake\I18n\Time; Time::setToStringFormat('yyyy/MM/dd HH:mm'); 

अपने bootstrap.php ध्यान दें कि Time::setJsonEncodeFormat() और Time::$niceFormat जिसे आप भी संशोधित करना चाहते हैं

यह भी देखें

  • कुकबुक> अंतर्राष्ट्रीयकरण और स्थानीयकरण> स्थानीयकृत डेटा टाइम डेटा को पार्स करना
  • कुकबुक> समय> डिफ़ॉल्ट लोकेल और स्वरूप स्ट्रिंग को सेट करना

इसे मार्शलिंग से पहले इनपुट कन्वर्ट करें

एक और विकल्प होगा उदाहरण के लिए मार्शलिंग प्रक्रिया से पहले डेटा को Time उदाहरणों में कनवर्ट करें। यह पिछले उल्लिखित हल से संभावित समस्याओं से बचना होगा जो सभी इनपुट को प्रभावित करेगा।

आपके InterventionsTable क्लास में (एक व्यवहार या बाह्य श्रोता में भी रखा जा सकता है):

 use Cake\Event\Event; use Cake\I18n\Time; ... public function beforeMarshal(Event $event, \ArrayObject $data, \ArrayObject $options) { foreach (['starttime', 'endtime'] as $key) { if (isset($data[$key]) && is_string($data[$key])) { $data[$key] = Time::parseDateTime($data[$key], 'yyyy/MM/dd HH:mm'); } } } 

यह भी देखें

कुकबुक> डेटाबेस प्रवेश और ORM> डेटा सहेजना> भवन निर्माण इकाइयां से पहले डेटा का संशोधित करें