एक दिन को एक तारीख में जोड़ना


172

एक दिन में एक दिन जोड़ने के लिए मेरा कोड दिन जोड़ने से पहले एक तारीख देता है: 2009-09-30 20:24:00एक दिन जोड़ने के बाद की तारीख अगले दिन तक लुढ़का होना चाहिए:1970-01-01 17:33:29

<?php

    //add day to date test for month roll over

    $stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00"));

    echo 'date before day adding: '.$stop_date; 

    $stop_date = date('Y-m-d H:i:s', strtotime('+1 day', $stop_date));

    echo ' date after adding one day. SHOULD be rolled over to the next month: '.$stop_date;
?>

मैंने पहले भी काफी समान कोड का उपयोग किया है, मैं यहां क्या गलत कर रहा हूं?

जवाबों:


333
<?php
$stop_date = '2009-09-30 20:24:00';
echo 'date before day adding: ' . $stop_date; 
$stop_date = date('Y-m-d H:i:s', strtotime($stop_date . ' +1 day'));
echo 'date after adding 1 day: ' . $stop_date;
?>

PHP 5.2.0+ के लिए, आप निम्नानुसार भी कर सकते हैं:

$stop_date = new DateTime('2009-09-30 20:24:00');
echo 'date before day adding: ' . $stop_date->format('Y-m-d H:i:s'); 
$stop_date->modify('+1 day');
echo 'date after adding 1 day: ' . $stop_date->format('Y-m-d H:i:s');

3
धन्यवाद। इसे इस रूप में हल किया गया: $ stop_date = date ('Ymd H: i: s', strtotime ("$ stop_date + 1 day"));
इआन

11
आपको एक स्ट्रिंग में एक चर का उपयोग नहीं करना चाहिए। आपको उपयोग करना चाहिए: date('Y-m-d H:i:s', strtotime($stop_date . ' + 1 day'));जैसा कि उस उत्तर में @ w35l3y ने आपको दिया है।
कैस ब्लोम

इस कोड को चलाने से पहले आपको date_default_timezone_set फ़ंक्शन पर कॉल जोड़ना चाहिए। उदाहरण के लिए date_default_timezone_set ('यूरोप / रोम') जोड़ें;
लुका मास्ट्रोस्टेफैनो

96
$date = new DateTime('2000-12-31');

$date->modify('+1 day');
echo $date->format('Y-m-d') . "\n";

6
यह एक और हालिया -प्रक्रिया-समाधान है।
कैस ब्लूमे

... जब तक यह आपके मेजबान पर चलाने के लिए घातक त्रुटियों का कारण नहीं बनता है;)
हेनरिक एर्लड्सन

माफी न मांगें। आपके द्वारा किए जाने के 3 साल बाद कुछ लोगों ने डेम का उत्तर पोस्ट किया
मोग कहते हैं मोनिका

1
इस कोड को चलाने से पहले आपको date_default_timezone_set फ़ंक्शन पर कॉल जोड़ना चाहिए। उदाहरण के लिए date_default_timezone_set ('यूरोप / रोम') जोड़ें;
लुका मास्ट्रोस्टेफैनो

@LucaMastrostefano नहीं, आपको अपने सर्वर पर टाइमज़ोन सेट करना चाहिए ...
MH

28

सबसे सरल समाधान:

$date = new DateTime('+1 day');
echo $date->format('Y-m-d H:i:s');

मैं एक एक लाइनर में अपना रास्ता चाहतेecho (new DateTime('+1 day'))->format('Y-m-d H:i:s');
आबा

@Aba मुझे नहीं लगता कि आपका एक लाइनर PHP के पुराने संस्करणों में काम करता है क्योंकि मैंने इसकी कोशिश की और मुझे एक त्रुटि मिली:Unexpected T_OBJECT_OPERATOR” error in PHP
Zachary Weixelbaum

25

इसने मेरे लिए काम किया: वर्तमान तिथि के लिए

$date = date('Y-m-d', strtotime("+1 day"));

किसी भी के लिए:

date('Y-m-d', strtotime("+1 day", strtotime($date)));

2
धन्यवाद यह मेरे लिए काम किया। सभी दिए गए समाधानों में सबसे सरल।
पुनीत वर्मा

2
आपको दोहराने और घोंसले की आवश्यकता नहीं है strtotime()- यह एक कॉल में सब कुछ संभाल सकता है:date('Y-m-d', strtotime($date . " +1 day"));
बिलियोनह

2
अच्छा, यह सबसे सरल उपाय है! धन्यवाद
एन्जिल


6

पढ़ने और समझने का सरल तरीका:

$original_date = "2009-09-29";

$time_original = strtotime($original_date);
$time_add      = $time_original + (3600*24); //add seconds of one day

$new_date      = date("Y-m-d", $time_add);

echo $new_date;

3
यह कभी-कभी दिन की बचत परिवर्तनों पर विफल हो जाता है जब दिन की लंबाई 24 घंटे नहीं होती है।
निक डॉव

3

मैं हमेशा सिर्फ 86400 (एक दिन में सेकंड) जोड़ता हूं:

$stop_date = date('Y-m-d H:i:s', strtotime("2009-09-30 20:24:00") + 86400);

echo 'date after adding 1 day: '.$stop_date; 

यह सबसे आसान तरीका नहीं है जो आप शायद कर सकते हैं, लेकिन यह काम करता है!


86400 को जोड़ने पर आप लीप सेकंड से कैसे निपटेंगे क्योंकि उस दिन 86401 सेकंड नहीं होंगे? (ठीक है, मुझे पता है कि यह हर कुछ वर्षों में होता है, लेकिन ऐप के आधार पर यह महत्वपूर्ण हो सकता है)
Glen

1
सभी दिनों में उनमें 86400 सेकंड नहीं होते हैं। वास्तव में, अमेरिका में अधिकांश स्थानों पर वर्ष में दो बार 3600 कम या अतिरिक्त सेकंड होते हैं।
पीटर कोवाक्स

1
आप सुरक्षित रूप से लीप सेकंड को अनदेखा कर सकते हैं, क्योंकि "यूनिक्स समय" करता है। यह कुछ जटिल है, लेकिन अधिक जानकारी के लिए इस लेख को पढ़ें: derickrethans.nl/leap_seconds_and_what_to_do_with_them.php
17:14 बजे ईसाई डेवन

2
आपको इस समाधान से बचना चाहिए। यहाँ क्यों है: stackoverflow.com/questions/2613338/…
mspir

1
पिछले दिन date६४०० सेकंड जोड़कर तारीख मत जोड़ो! आप अपने कोड में बग होगा! यह डेलाइट सेविंग डेज पर काम नहीं करता है!
sbrbot

1

हालांकि मैं डग हैस के जवाब से सहमत हूं, मैं यह कहने के लिए यहां झंकार करूंगा कि आपके कोड के काम न करने का कारण यह है कि स्ट्रेटाइम () एक INT को 2 तर्क के रूप में है, न कि एक स्ट्रिंग (यहां तक ​​कि एक तारीख का प्रतिनिधित्व करता है)

यदि आप अधिकतम त्रुटि रिपोर्टिंग चालू करते हैं, तो आप इसे "एक गैर-अच्छी तरह से गठित संख्यात्मक मान" त्रुटि के रूप में देखेंगे जो कि E_NOTICE स्तर है।


1

modify()मौजूदा DateTimeमूल्य में वृद्धि को जोड़ने के लिए जिस विधि का उपयोग किया जा सकता है ।

DateTimeवर्तमान दिनांक और समय के साथ एक नई वस्तु बनाएं :

$due_dt = new DateTime();

एक बार आपके पास DateTimeवस्तु हो जाने पर, आप समय अवधि जोड़कर या घटाकर इसके मूल्य में फेरबदल कर सकते हैं:

$due_dt->modify('+1 day');

आप PHP मैन्युअल पर अधिक पढ़ सकते हैं ।


0

निम्नलिखित कोड को चालू वर्ष के जनवरी के पहले दिन मिलता है (लेकिन यह एक और तारीख हो सकती है) और उस दिन में 365 दिन जोड़ सकते हैं (लेकिन यह दिनों की संख्या हो सकती है) DateTime वर्ग और इसकी विधि संशोधित () और प्रारूप का उपयोग कर () ):

echo (new DateTime((new DateTime())->modify('first day of January this year')->format('Y-m-d')))->modify('+365 days')->format('Y-m-d');

0

चूंकि आपके पास पहले से ही आपके कोड में क्या गलत है, इसका जवाब है, मैं एक और परिप्रेक्ष्य ला सकता हूं कि आप आम तौर पर डेटासेट के साथ कैसे खेल सकते हैं, और विशेष रूप से आपकी समस्या को हल कर सकते हैं।

अक्सर आप समाधान के मामले में खुद को एक समस्या बनाते हुए पाते हैं। यह सिर्फ एक कारण है जो आप अनिवार्य कोड के साथ समाप्त करते हैं । यह बहुत अच्छा है अगर यह काम करता है; वहाँ सिर्फ अन्य, यकीनन अधिक बनाए रखने योग्य विकल्प हैं। उनमें से एक घोषित कोड है। बिंदु पूछ रहा है कि आपको क्या चाहिए, इसके बजाय कि वहां कैसे पहुंचें।

आपके विशेष मामले में, यह निम्नलिखित की तरह लग सकता है। सबसे पहले, आपको यह पता लगाने की आवश्यकता है कि वह क्या है जिसे आप खोज रहे हैं, अर्थात, अमूर्तता की खोज करें। आपके मामले में, ऐसा लगता है कि आपको एक तारीख की आवश्यकता है । सिर्फ कोई तारीख नहीं, बल्कि कुछ मानक प्रतिनिधित्व वाले। कहें, ISO8601 तारीख। कम से कम दो कार्यान्वयन हैं: पहला एक ISO8601-स्वरूपित स्ट्रिंग (या वास्तव में किसी अन्य प्रारूप में एक स्ट्रिंग) से पार्स की गई तारीख है, और दूसरा कुछ भविष्य की तारीख है जो एक दिन बाद है। इस प्रकार, पूरा कोड इस तरह दिख सकता है:

(new Future(
    new DateTimeParsedFromISO8601('2009-09-30 20:24:00'),
    new OneDay()
))
    ->value();

डेटाइम जॉगिंग के साथ अधिक उदाहरणों के लिए इसे देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.