PHP के साथ 1 दिन घटाएं


83

मैं एक तारीख वस्तु लेने की कोशिश कर रहा हूं जो मेरे ड्रुपल सीएमएस से निकल रही है, एक दिन घटाएं और दोनों तिथियों का प्रिंट आउट लें। यहाँ मेरे पास क्या है

$date_raw = $messagenode->field_message_date[0]['value'];

print($date_raw);

//this gives me the following string: 2011-04-24T00:00:00

$date_object = date_create($date_raw);

$next_date_object = date_modify($date_object,'-1 day');

print('First Date ' . date_format($date_object,'Y-m-d'));

//this gives me the correctly formatted string '2011-04-24'

print('Next Date ' . date_format($next_date_object,'Y-m-d'));

//this gives me nothing. The output here is always blank

इसलिए मुझे समझ नहीं आ रहा है कि मूल दिनांक ऑब्जेक्ट ठीक क्यों आ रहा है, लेकिन फिर मैं एक अतिरिक्त दिनांक ऑब्जेक्ट बनाने और एक दिन घटाकर इसे संशोधित करने की कोशिश कर रहा हूं और ऐसा लगता है कि मैं ऐसा नहीं कर सकता। आउटपुट हमेशा खाली आता है।

जवाबों:


147

तुम कोशिश कर सकते हो:

print('Next Date ' . date('Y-m-d', strtotime('-1 day', strtotime($date_raw))));

1
आप $ date_raw को एक ही प्रारूप$date_raw = date("r");
sHaDeoNeR

5
सावधान रहे! यदि आप 2038 से परे तारीखों को संभालते हैं तो यह PHP में पूर्णांक आकार सीमा (कम से कम 32 बिट प्लेटफॉर्म) के कारण काम नहीं करेगा। उस मामले में, सबसे सुरक्षित समाधान का उपयोग करना है DateTime( यहां देखें )।
टिप-सा.यु


36
$date = new DateTime("2017-05-18"); // For today/now, don't pass an arg.
$date->modify("-1 day");
echo $date->format("Y-m-d H:i:s");

डेटटाइम का उपयोग करने से तारीखों में हेरफेर करने के दौरान सहन किए जाने वाले सिरदर्द की मात्रा में काफी कमी आई है।


6
date_createDateTimeनिर्माणकर्ता को आमंत्रित करने के लिए प्रक्रियात्मक विधि है , जो आपको बिना उपयोग किए 1 में अपनी 3 लाइनों को कम करने की अनुमति देता है new। यानीecho date_create('2017-05-18')->modify('-1 day')->format('Y-m-d H:i:s');
आर्मफूट

ठीक है, मूल asnwer से कोड भी 1 लाइन में लिखा जा सकता है, जैसे:(new \DateTime("2017-05-18"))->modify("-1 day")->format("Y-m-d H:i:s")
Scofield

22

वस्तु उन्मुख संस्करण

$dateObject = new DateTime( $date_raw );
print('Next Date ' . $dateObject->sub( new DateInterval('P1D') )->format('Y-m-d');

आपका जवाब एक दिन को जोड़ने के बजाय इसे घटा देता है। इसके अलावा यह मेरा पसंदीदा समाधान होगा।
बुरकी

18

एक लाइनर विकल्प है:

echo date_create('2011-04-24')->modify('-1 days')->format('Y-m-d');

यह ऑनलाइन PHP संपादक पर चल रहा है ।


mktime विकल्प

यदि आप स्ट्रिंग विधियों, या गणनाओं में जाने से या अतिरिक्त चर बनाने से बचना पसंद करते हैं, तो mktime निम्नलिखित तरीके से घटाव और नकारात्मक मूल्यों का समर्थन करता है:

// Today's date
echo date('Y-m-d'); // 2016-03-22

// Yesterday's date
echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-1, date("Y"))); // 2016-03-21

// 42 days ago
echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-42, date("Y"))); // 2016-02-09

//Using a previous date object
$date_object = new DateTime('2011-04-24');
echo date('Y-m-d',
  mktime(0, 0, 0,
     $date_object->format("m"),
     $date_object->format("d")-1,
     $date_object->format("Y")
    )
); // 2011-04-23

ऑनलाइन PHP संपादक


13

निश्चित नहीं है कि आपका वर्तमान कोड क्यों काम नहीं कर रहा है, लेकिन यदि आपको विशेष रूप से किसी दिनांक ऑब्जेक्ट की आवश्यकता नहीं है, तो यह काम करेगा:

$first_date = strtotime($date_raw);
$second_date = strtotime('-1 day', $first_date);

print 'First Date ' . date('Y-m-d', $first_date);
print 'Next Date ' . date('Y-m-d', $second_date);

धन्यवाद क्लाइव! कि एक ने मेरे लिए काम किया ... हाँ, मुझे वास्तव में दिनांक ऑब्जेक्ट्स की आवश्यकता नहीं थी, मुझे बस स्वरूपित तिथियों को प्रिंट करने की आवश्यकता थी।
td-dev

7

Php मैनुअल स्ट्रैटोटाइम फंक्शन टिप्पणियों से लिया गया उत्तर:

echo date( "Y-m-d", strtotime( "2009-01-31 -1 day"));

या

$date = "2009-01-31";
echo date( "Y-m-d", strtotime( $date . "-1 day"));


3

इसके बारे में कैसे: इसे पहले एक यूनिक्स टाइमस्टैम्प में परिवर्तित करें, 60 * 60 * 24 (सेकंड में एक दिन) घटाएं, और फिर उसी से तारीख निकालें।

$newDate = strtotime($date_raw) - 60*60*24;
echo date('Y-m-d',$newDate);

ध्यान दें: जैसा कि एपोक्रिफ़ोस ने बताया है, यह तकनीकी रूप से दिन के उजाले बचत समय के बदलावों से दूर हो जाएगा जहाँ एक दिन में 25 या 23 घंटे होंगे।


एक अच्छा, केवल मैंने इसे इस तरह बनाया: $ newDate = date_create ($ date_raw) -> getTimestamp () - 60 * 60 * 24;
येवगेनी अफानसेयेव

यह मानता है कि सभी दिन 24 घंटे लंबे होते हैं जो उन 2 दिनों में सच नहीं होते हैं जब दुनिया का एक अल्पसंख्यक अधिक या कम धूप का भ्रम प्रदान करने के लिए अपनी घड़ियों को +/- 1 घंटे तक घुमाता है। और फिर वहाँ छलांग सेकंड के रूप में अच्छी तरह से है।
Apokryfos

यह एक शानदार कैच है @apokryfos। मैं सुपर वैज्ञानिक गणना के लिए इसका उपयोग नहीं करूंगा, लेकिन अधिकांश मामलों में यह अभी भी ठीक होना चाहिए।
user3413723

-1

दिनांक में 1 वर्ष कैसे जोड़ें और फिर इसे asp.net c # में 1 दिन घटाएं

Convert.ToDateTime(txtDate.Value.Trim()).AddYears(1).AddDays(-1);

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