तिथि से महीने का अंतिम दिन कैसे खोजें?


382

मैं PHP में महीने का आखिरी दिन कैसे प्राप्त कर सकता हूं?

दिया हुआ:

$a_date = "2009-11-23"

मुझे 2009-11-30 चाहिए; और दिया गया

$a_date = "2009-12-23"

मुझे 2009-12-31 चाहिए।

जवाबों:


805

tकिसी दिए गए तारीख के महीने में कितने दिन मिलते हैं ( डॉक्सdate देखें ):

$a_date = "2009-11-23";
echo date("Y-m-t", strtotime($a_date));

99
यह वर्ष 2038 के बाद विफल हो जाएगा। इसलिए स्ट्रेटोटाइम के बजाय, डेटटाइम फ़ंक्शन का उपयोग किया जाना चाहिए। निम्नलिखित कोड वर्ष 2038 समस्या के बिना काम करेगा: $ d = नया दिनांक समय ('2009-11-23'); इको $ d-> स्वरूप ('Ymt');
मुगुनथ

74
@ मुगुंठ यदि आप भविष्य में 24 साल की तारीखों के साथ काम कर रहे हैं, तो आप 2038 की तुलना में जल्द ही समस्याओं में भाग सकते हैं, हालांकि, सर्वर पहले से ही 64-बिट आर्किटेक्चर पर आगे बढ़ रहे हैं जो हमें समस्या को ठीक करने के लिए लगभग 292 बिलियन साल देगा।
कोई नहीं

1
प्रक्रियात्मक में -> $ date1 = $ वर्ष ।'- '। $ महीना; $ d = date_create_from_format ('Y-m', $ date1); $ last_day = date_format ($ d, 't');
kayla

11
साथ DateTime: यदि आप कुछ इस तरह कर सकते हैं(new DateTime('2009-11-23'))->modify('last day of')
विक्टर

यदि आप कार्बन PHP का उपयोग कर रहे हैं, तो आप दिनों का उपयोग कर सकते हैं।मॉटर गेटर
astroanu

119

वर्ष 2038 के बाद strtotime () का उपयोग करने वाला कोड विफल हो जाएगा (जैसा कि इस धागे में पहले उत्तर में दिया गया है) उदाहरण के लिए निम्नलिखित का उपयोग करने का प्रयास करें:

$a_date = "2040-11-23";
echo date("Y-m-t", strtotime($a_date));

यह उत्तर देगा: 1970-01-31

इसलिए strtotime के बजाय, DateTime फ़ंक्शन का उपयोग किया जाना चाहिए। निम्नलिखित कोड वर्ष 2038 समस्या के बिना काम करेगा:

$d = new DateTime( '2040-11-23' ); 
echo $d->format( 'Y-m-t' );

17
मैं 71 वर्ष का हो जाऊंगा और तब तक सेवानिवृत्त हो जाऊंगा, इसलिए मेरे लिए कोई समस्या नहीं है! j / k लेकिन गंभीर रूप से लोग - इस चेतावनी को ध्यान में रखते हुए!
वोलोमाइक

17
यह मानता है कि आप PHP का 32-बिट संस्करण चला रहे हैं।
कोई नहीं

क्यों यह चौंकाने वाला तथ्य php डॉट php.net/manual/de/function.strtotime.php में उल्लेख नहीं किया गया है ?
एडम

1
@ अदम यह अब है, सुनिश्चित नहीं है कि जब यह जाँच की गई थी। php.net/manual/de/...
मेव

1
2018 तक, strtotimeकोड मुझे यह परिणाम देता है: 2040-11-30
जी

104

मुझे पता है कि यह थोड़ा देर से है, लेकिन मुझे लगता है PHP 5.3+कि डेटटाइम क्लास का उपयोग करके ऐसा करने का एक और अधिक सुंदर तरीका है :

$date = new DateTime('now');
$date->modify('last day of this month');
echo $date->format('Y-m-d');

20
एक पंक्ति में: $ तारीख = नई तिथि समय ('इस महीने का अंतिम दिन');
हेरोल्ड

6
आप $ तिथि जोड़ना चाहते हैं-> संशोधित ('इस महीने का अंतिम दिन') -> सेटटाइम (23,59,59); यदि आप इस तारीख का उपयोग तुलना के लिए करना चाहते हैं जहां समय मायने रखता है। (यह आपको महीने का अंतिम दूसरा हिस्सा देता है)
omgitsdrobinoha

5
यह काम करता है:$date = new DateTime('last day of 2020-2');

4
@ आप गलत हैं। अंतिम दिन की गणना $ दिनांक ऑब्जेक्ट और सिस्टम दिनांक का उपयोग करके की जाती है। इसके साथ पहली पंक्ति को बदलकर देखें:$date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
हन्नून यासिर

5
यदि आप सोचते थे या कम से कम कोशिश करते हैं कि मैंने आपसे जो करने के लिए कहा था, तो आप देखेंगे कि इस महीने का अर्थ है दिनांक समय ऑब्जेक्ट में सिस्टम की तारीख नहीं। यदि आप php कोड टाइप / रन नहीं कर सकते हैं तो यह मदद कर सकता है: sandbox.onlinephpfunctions.com/code/…
हन्नौन यासिर

76

PHP फ़ंक्शन cal_days_in_month () में भी बनाया गया है ?

"यह फ़ंक्शन निर्दिष्ट कैलेंडर के लिए वर्ष के महीने में दिनों की संख्या लौटाएगा।" http://php.net/manual/en/function.cal-days-in-month

echo cal_days_in_month(CAL_GREGORIAN, 11, 2009); 
// = 30

2
यह उत्तर स्ट्रैटो टाइम के उपयोग की तुलना में बहुत सरल और उपयुक्त है। मुझे कोई गिरावट नहीं दिख रही है। ऊपर तक तुम जाते हो।
टॉमस ज़ुबरी 20

यह स्वीकृत उत्तर होना चाहिए था।
सिप्पल

24

यह काम करना चाहिए:

$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());

$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());

$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());

echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';

echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';

echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';

18

क्या गलत है - मेरे लिए सबसे सुरुचिपूर्ण उपयोग कर रहा है DateTime

मुझे आश्चर्य है कि मैं नहीं देखता DateTime::createFromFormat, एक-लाइनर

$lastDay = \DateTime::createFromFormat("Y-m-d", "2009-11-23")->format("Y-m-t");

2
मैं सहमत हूँ। यह समाधान (डेटाइम क्लास) पुराने डेटाइम फ़ंक्शंस का उपयोग करने से बहुत बेहतर है।
schellingerht

17

आप अगले महीने के पहले के लिए एक तारीख बना सकते हैं, और फिर उपयोग कर सकते हैं strtotime("-1 day", $firstOfNextMonth)


उसी दृष्टिकोण का उपयोग कर एक वैकल्पिक विधि अगले महीने के 0 वें दिन mktime देने के लिए हैmktime(0, 0, 0, $month+1, 0, $year);
जॉर्ज

मेरे लिए, के उपयोग के रूप में strtotime()और mktime()निराश हतोत्साहित है। महीने के किनारे पर तारीख निर्धारण और लीप ईयर कैलाकुलेशन जैसे ज्ञात कीड़े। चूंकि DateTimeउपलब्ध है, इसलिए आपको भविष्य में किसी भी समस्या से बचने के लिए इस वर्ग का उपयोग करना चाहिए। जैसा कि मेरे सामने कई बार कहा गया है, ये दोनों कार्य strtotime()और mktime()2038 के बाद विफल हो जाएंगे। यही कारण है कि मैं
नीचा दिखा

@ PaulT.Rawkeen यह उत्तर 4 वर्ष से अधिक पुराना है। इंटरनेट पर किसी भी चीज के साथ, प्रासंगिकता और उपयोगिता को देखते हुए उम्र एक कारक होनी चाहिए। इसके अलावा, IMHO, प्रौद्योगिकी से संबंधित किसी भी चीज के लिए समय कम है।
nikc.org

@ nikc.org मैं सहमत हूं, विशेष रूप से सभी तकनीकी समाधानों और समस्याओं को हल करने के तरीकों के लिए जीवन के समय के बारे में। इस विशेष मामले में, उत्तर की अपेक्षाकृत अच्छी संख्या होती है और शायद, कोई ( जूनियर प्रोग्रामर ) इस उत्तर को स्वीकार्य उत्तर दे सकता है। यह छोटा और सुरुचिपूर्ण है :) और वह शायद अपेक्षित परिणाम प्राप्त करेगा, लेकिन जैसे-जैसे समय बीतता है, इस तरह की समस्याओं को हल करने का यह तरीका मुश्किल हो जाता है और हमें ऐसे तथ्यों के बारे में चेतावनी देनी चाहिए जब इसके संभव हो। का संबंध है
पॉल टी। रॉकेन

16

यह प्रयास करें, यदि आप PHP 5.3+ का उपयोग कर रहे हैं,

$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');

अगले महीने अंतिम तिथि खोजने के लिए, इस प्रकार संशोधित करें,

 $date->modify('last day of 1 month');
 echo $date->format('Y-m-d');

और इसी तरह..



10

आप महीने के अंतिम दिन कई तरीकों से पा सकते हैं। लेकिन बस आप PHP strtotime () और date () फ़ंक्शन का उपयोग करके ऐसा कर सकते हैं। मुझे लगता है कि आपका अंतिम कोड कुछ इस तरह दिखाई देगा:

$a_date = "2009-11-23";
echo date('Y-m-t',strtotime($a_date));

लाइव डेमो

लेकिन अगर आप PHP> = 5.2 का उपयोग कर रहे हैं, तो मैं दृढ़ता से सुझाव देता हूं कि आप नए डेटाइम ऑब्जेक्ट का उपयोग करें। नीचे दिए गए उदाहरण के लिए:

$a_date = "2009-11-23";
$date = new DateTime($a_date);
$date->modify('last day of this month');
echo $date->format('Y-m-d');

लाइव डेमो

इसके अलावा, आप नीचे दिए गए अपने स्वयं के फ़ंक्शन का उपयोग करके इसे हल कर सकते हैं:

/**
 * Last date of a month of a year
 *
 * @param[in] $date - Integer. Default = Current Month
 *
 * @return Last date of the month and year in yyyy-mm-dd format
 */
function last_day_of_the_month($date = '')
{
    $month  = date('m', strtotime($date));
    $year   = date('Y', strtotime($date));
    $result = strtotime("{$year}-{$month}-01");
    $result = strtotime('-1 second', strtotime('+1 month', $result));

    return date('Y-m-d', $result);
}

$a_date = "2009-11-23";
echo last_day_of_the_month($a_date);

अपने कार्य के लिए धन्यवाद, यह काम करता है जैसा कि मुझे उम्मीद थी :)
Mankeomorakort

7

यदि आप PHP DateTime के लिए कार्बन एपीआई एक्सटेंशन का उपयोग करते हैं , तो आप महीने का अंतिम दिन प्राप्त कर सकते हैं:

$date = Carbon::now();
$date->addMonth();
$date->day = 0;
echo $date->toDateString(); // use toDateTimeString() to get date and time 

दरअसल, अगर आप दिन को -1 पर सेट करते हैं, तो इसे अंतिम लेकिन एक मिलेगा। तो अंतिम दिन पाने के लिए आपको दिन को 0 पर सेट करना होगा। $date->day = 0;
जियोवैन अफोंसो

शुक्रिया @GiovanneAfonso जो सही है। मैंने दिन को 0 पर सेट किया और उत्तर का परीक्षण किया।
ईकिन

1
यदि आप कार्बन का उपयोग कर रहे हैं, तो एक-लाइनर दृष्टिकोण का उपयोग करना है: कार्बन :: अब () -> एंडऑफमॉंट ()। हालाँकि, endOfMonth () एक संशोधक है, इसलिए "क्लोन" का उपयोग करें यदि आपके पास कार्बन दिनांक (या दिनांक संशोधित किया जाएगा) में विद्यमान चर है।
चार्ली दलसस

4

आप इसे डेटाइम के साथ भी उपयोग कर सकते हैं

$date = new \DateTime();
$nbrDay = $date->format('t');
$lastDay = $date->format('Y-m-t');


2

Zend_Date का उपयोग करना बहुत आसान है:

$date->setDay($date->get(Zend_Date::MONTH_DAYS));

2

यदि आपके पास माहवार है तो महीने की अंतिम तारीख प्राप्त करें,

public function getLastDateOfMonth($month)
    {
        $date = date('Y').'-'.$month.'-01';  //make date of month 
        return date('t', strtotime($date)); 
    }

$this->getLastDateOfMonth(01); //31

1

यहाँ एक पूर्ण कार्य है:

public function get_number_of_days_in_month($month, $year) {
    // Using first day of the month, it doesn't really matter
    $date = $year."-".$month."-1";
    return date("t", strtotime($date));
}

यह निम्नलिखित उत्पादन होगा:

echo get_number_of_days_in_month(2,2014);

आउटपुट: 28


1

महीने के अंतिम दिन प्राप्त करने के तरीके हैं।

//to get last day of current month
echo date("t", strtotime('now'));

//to get last day from specific date
$date = "2014-07-24";
echo date("t", strtotime($date));

//to get last day from specific date by calendar
$date = "2014-07-24";
$dateArr=explode('-',$date);
echo cal_days_in_month(CAL_GREGORIAN, $dateArr[1], $dateArr[0]); 

1

मुझे देर हो चुकी है लेकिन इसके लिए कुछ आसान तरीके बताए गए हैं:

$days = date("t");
$days = cal_days_in_month(CAL_GREGORIAN, date('m'), date('Y'));
$days = date("j",mktime (date("H"),date("i"),date("s"),(date("n")+1),0,date("Y")));

Mktime () का उपयोग करते हुए समय के सभी पहलुओं पर पूर्ण नियंत्रण के लिए मेरा जाना है ... IE

echo "<br> ".date("Y-n-j",mktime (date("H"),date("i"),date("s"),(11+1),0,2009));

दिन को 0 पर सेट करना और अपने महीने को 1 तक ले जाना आपको पिछले महीने का आखिरी दिन देगा। 0 और ऋणात्मक संख्याओं के अलग-अलग तर्क में समान प्रभाव होता है। PHP: mktime - मैनुअल

जैसा कि कुछ ने कहा है कि स्ट्रेटोटाइम जाने के लिए सबसे ठोस तरीका नहीं है और अगर कोई भी आसानी से बहुमुखी नहीं है, तो यह बहुत कम है।


1

मैं निम्नलिखित के रूप में cal_days_in_month के साथ strtotime का उपयोग कर रहा हूं:

$date_at_last_of_month=date('Y-m-d', strtotime('2020-4-1
+'.(cal_days_in_month(CAL_GREGORIAN,4,2020)-1).' day'));


0

Mktime और दिनांक ('t') का उपयोग करने का दूसरा तरीका :

$dateStart= date("Y-m-d", mktime(0, 0, 0, 10, 1, 2016)); //2016-10-01
$dateEnd = date("Y-m-d", mktime(0, 0, 0, 11, 0, 2016)); //This will return the last day of october, 2016-10-31 :)

तो इस तरह से यह गणना करता है यदि यह 31,30 या 29 है


0

कार्बनPHP DateTime के लिए एपीआई एक्सटेंशन

Carbon::parse("2009-11-23")->lastOfMonth()->day;

या

Carbon::createFromDate(2009, 11, 23)->lastOfMonth()->day;

वापस होगा

30

-1
function first_last_day($string, $first_last, $format) {
    $result = strtotime($string);
    $year = date('Y',$result);
    $month = date('m',$result);
    $result = strtotime("{$year}-{$month}-01");
    if ($first_last == 'last'){$result = strtotime('-1 second', strtotime('+1 month', $result)); }
    if ($format == 'unix'){return $result; }
    if ($format == 'standard'){return date('Y-m-d', $result); }
}

http://zkinformer.com/?p=134


-2

महीने का अंत पाने के लिए यह एक और अधिक सुंदर तरीका है:

  $thedate = Date('m/d/Y'); 
  $lastDayOfMOnth = date('d', mktime(0,0,0, date('m', strtotime($thedate))+1, 0, date('Y', strtotime($thedate)))); 

-3

आप tकिसी विशेष महीने में दिन की संख्या प्राप्त करने के लिए " " तिथि फ़ंक्शन का उपयोग कर सकते हैं ।

कोड कुछ इस तरह होगा:

function lastDateOfMonth($Month, $Year=-1) {
    if ($Year < 0) $Year = 0+date("Y");
    $aMonth         = mktime(0, 0, 0, $Month, 1, $Year);
    $NumOfDay       = 0+date("t", $aMonth);
    $LastDayOfMonth = mktime(0, 0, 0, $Month, $NumOfDay, $Year);
    return $LastDayOfMonth;
}

for($Month = 1; $Month <= 12; $Month++)
    echo date("Y-n-j", lastDateOfMonth($Month))."\n";

कोड स्व-समझाया गया है। तो उम्मीद है कि यह मदद करता है।

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