2013-07-31 6 views
9

मेरा फ़ॉर्म 2 क्षेत्रों है - Time_from और Time_toदिनांक समय जोड़ने के 1 दिन

अब मैं प्रत्येक दिन के लिए मेरी डेटाबेस में एक प्रविष्टि जोड़ने के लिए पूर्व (यदि थेरेस उन दिनों के बीच एक अंतर है) की जरूरत है। Time_from = 2013-08-26 08:00:00 और Time_to = 2013-08-28 16:00:00 तो मेरी डेटाबेस में मैं मिलना चाहिए 3 प्रविष्टियों

Time_from = 2013-08-26 08:00:00 and Time_to = 2013-08-26 16:00:00 
Time_from = 2013-08-27 08:00:00 and Time_to = 2013-08-27 16:00:00 
Time_from = 2013-08-28 08:00:00 and Time_to = 2013-08-28 16:00:00 

तो उस उद्देश्य के लिए मैं एक बना दिया है विधि, जहां मुझे पहली बार उन 2 तिथियों के बीच अंतर मिलता है और फिर मैं लूप के लिए उपयोग कर रहा हूं जो कि उन 2 तिथियों के अंतर में कई दिनों तक चलता रहेगा, और अंत में मैं केवल 1 दिन जोड़ रहा हूं।

public function createOffer($offer) 
{ 
$time_from = new DateTime($offer->time_from); 
$time_to = new DateTime($offer->time_to); 
$interval = $time_from->diff($time_to); 

for ($counter = 0; $counter <= $interval->d; $counter++) { 
    $offer->time_from = $time_from->format('Y-m-d H:i:s'); 
    $offer_time_to = new DateTime($time_from->format('Y-m-d')); 
    $offer_time_to->setTime($time_to->format('H'), $time_to->format('i') 
     , $time_to->format('s')); 
    $offer->time_to = $offer_time_to->format('Y-m-d H:i:s'); 

    if ($offer->validate()) { 
    $offer->save(); 
    } 

    date_modify($time_from, '+1 day'); 
    } 
} 

किसी कारण से, कोड काम नहीं करता।

जब मैं date_modify क्षेत्र केवल पहले दिन मेरी डेटाबेस में सहेजा जाएगा निकाल सकते हैं (लगता पाश के लिए उसके बाद ही एक बार चल रहा है)

लेकिन मेरे कोड में date_modify के साथ, केवल अंतिम दिन में सहेजा जाता है डेटाबेस।

+0

$ अंतराल> घ वहाँ कोई "दिन" अंतर है, केवल घंटे, बार में दिए गए तो पाश केवल एक बार – Anigel

+0

तो अंतर चलेंगे है दिनों के बीच केवल मुझे घंटे दिखाया गया है? – CreamYGEEK

+0

http://phpfiddle.org/main/code/3r1-6hc क्या आप वाकई अंतराल के बजाय $ अंतराल-> एच नहीं चाहते हैं-> डी – Anigel

उत्तर

21

आप datatime वस्तु के समारोह जोड़े का उपयोग कर सकते

यहाँ मैं तुम्हें एक उदाहरण की तरह

<?php 
$date = new DateTime('2000-01-01'); 
$date->add(new DateInterval('P1D')); 
echo $date->format('Y-m-d') . "\n"; 
?> 

आउटपुट

2000-01-02 

आशा अपनी पोस्ट की तारीख में एक 1 जोड़ने के लिए दे रहा हूँ

यह निश्चित रूप से आपकी समस्या को हल करने में आपकी सहायता करेगा।

+0

मुझे अभी भी वही परिणाम मिलता है, केवल अंतिम दिन डेटाबेस में सहेजा जाता है । – CreamYGEEK

+0

कृपया नई डेटटाइम ('अपनी तिथि') में जाने से पहले तारीख का पता लगाएं; और जब भी नई तारीख का मतलब है कि आपका कार्य फ़ंक्शन से मूल्य को वापस करने या वापस करने की आवश्यकता है, तो आपका कार्य वापस आना चाहिए। – liyakat

+0

आप समाधान काम करने लगते हैं .. स्पष्ट रूप से एक jquery समस्या है, जो बग के लिए ज़िम्मेदार है .. – CreamYGEEK

2
$date = new DateTime('2017-01-17'); 
$date->modify('+1 day'); 

echo $date->format('Y-m-d'); // 2017-01-18 

आप यह भी कर सकते हैं:

$dateTo = new \DateTime('1980-12-07 +1 day'); 
echo $dateTo->format('Y-m-d'); // 1980-12-08 
संबंधित मुद्दे