তারিখ থেকে মাসের শেষ দিনটি কীভাবে সন্ধান করবেন?


382

আমি পিএইচপি-তে মাসের শেষ দিনটি কীভাবে পেতে পারি?

প্রদত্ত:

$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 সালের পরে ব্যর্থ হবে So সুতরাং স্ট্রোটোটাইমের পরিবর্তে ডেটটাইম ফাংশনটি ব্যবহার করা উচিত। 2038 সমস্যা ছাড়াই নিম্নলিখিত কোডগুলি কাজ করবে: = d = নতুন তারিখটাইম ('২০০৯-১১-২৩'); প্রতিধ্বনি $ d-> ফর্ম্যাট ('Ymt');
মুগুন্থ

74
@ মুগুন্থ আপনি যদি ভবিষ্যতে 24 বছর তারিখ নিয়ে কাজ করে থাকেন তবে আপনি 2038 এর চেয়ে শীঘ্রই সমস্যার মধ্যে পড়তে পারেন, তবে সার্ভারগুলি ইতিমধ্যে 64-বিট আর্কিটেকচারে চলেছে যা আমাদের সমস্যাটি সংশোধন করতে প্রায় 292 বিলিয়ন বছর সময় দেবে।
কোনটি

1
পদ্ধতিগত -> $ তারিখ 1 = $ বছর .'- '। $ মাস; $ d = তারিখ_সৃজন_ফ্রমে_ফর্ম্যাট ('ওয়াই-এম', $ তারিখ 1); $ গত_দিন = তারিখ_ফর্ম্যাট ($ d, 'টি');
কায়লা

11
সঙ্গে DateTime: আপনি ভালো কিছু করতে পারেন(new DateTime('2009-11-23'))->modify('last day of')
ভিক্টর

আপনি যদি কার্বন পিএইচপি ব্যবহার করে থাকেন তবে আপনি দিনগুলি ব্যবহার করতে পারেনসামান্য গিটার
অ্যাস্ট্রোয়ানু

119

স্ট্রোটাইম () ব্যবহার করে কোডটি ২০৩৮ সালের পরে ব্যর্থ হবে ((এই থ্রেডের প্রথম উত্তরে দেওয়া আছে) উদাহরণস্বরূপ নিম্নলিখিতটি ব্যবহার করে দেখুন:

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

এটি উত্তর হিসাবে দেবে: 1970-01-31

সুতরাং স্ট্রোটোটাইমের পরিবর্তে ডেটটাইম ফাংশনটি ব্যবহার করা উচিত। নিম্নলিখিত কোড 2038 বছর সমস্যা ছাড়াই কাজ করবে:

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

17
ততক্ষণে আমি 71 বছর বয়সী এবং অবসর নেব, তাই আমার পক্ষে কোনও সমস্যা নয়! জে / কে কিন্তু গুরুতরভাবে ভাবেন - এই সতর্কতার প্রতি মনোযোগ দিন!
ভলমাইক

17
এটি ধরে নিয়েছে যে আপনি পিএইচপি এর 32-বিট সংস্করণটি চালাচ্ছেন।
কোনটি

পিএইচপি ডকুমেন্টে php.net/manual/de/function.strtotime.php এ স্ট্রোটোটাইম সম্পর্কে এই উদ্বেগজনক ঘটনাটি কেন উল্লেখ করা হয়নি ?
আদম

1
@ অ্যাডাম এখন এটি নিশ্চিত, আপনি চেক করার সময় এটি ছিল কিনা তা নিশ্চিত নয়। php.net/manual/de/...
Mave

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) যোগ করতে চাইতে পারেন; আপনি যদি সময় তারিখের তুলনায় এই ডেটটাইমটি ব্যবহার করতে চান। (এটি আপনাকে মাসের শেষ দ্বিতীয়টি দেয়)
ওমগিটসড্রোবিনোহা

5
এটি কাজ করে:$date = new DateTime('last day of 2020-2');

4
@ জন আপনি ভুল করেছেন শেষ দিনটি সিস্টেমের তারিখটি না করে $ তারিখের অবজেক্টটি ব্যবহার করে গণনা করা হয়। এটির মাধ্যমে প্রথম লাইনটি পরিবর্তন করে এটি ব্যবহার করে দেখুন:$date = DateTime::createFromFormat('m/d/Y', '1/10/2014');
হ্যাননুন ইয়াসির

5
আপনি যদি ভাবতে থাকেন বা অন্তত আমি আপনাকে যা করতে বলেছিলাম তা চেষ্টা করে দেখেন আপনি এই মাসটির অর্থ হ'ল তারিখটাইম অবজেক্টে মাসের মান সিস্টেমের তারিখ নয়। আপনি পিএইচপি কোড টাইপ / চালাতে না পারলে এটি
হ্যাননুন ইয়াসির

76

এখানে পিএইচপি ফাংশনটিতে অন্তর্নিহিত ক্যাল_ডেস_ইন_মেন্থ () ?

"এই ফাংশনটি নির্দিষ্ট ক্যালেন্ডারের জন্য বছরের মাসে মাসে সংখ্যাটি ফিরিয়ে দেবে" " http://php.net/manual/en/function.cal-days-in-month

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

2
এই উত্তরটি strtoTime ব্যবহারের চেয়ে অনেক সহজ এবং উপযুক্ত। আমি কোন ডাউনস্টাইড দেখতে পাচ্ছি না। শীর্ষে আপনি যান।
টমাস জুবিরি

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত ছিল।
সিপ্পিল

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
আমি রাজী. এই সমাধান (ডেটটাইম ক্লাস) পুরানো ডেটটাইম ফাংশনগুলি ব্যবহার করার চেয়ে অনেক ভাল।
স্কেলিনগারহ্ট

17

আপনি পরের মাসের প্রথমটির জন্য একটি তারিখ তৈরি করতে পারেন এবং তারপরে ব্যবহার করতে পারেন strtotime("-1 day", $firstOfNextMonth)


একই পদ্ধতির ব্যবহার করে একটি বিকল্প পদ্ধতি হ'ল এমকেটাইমকে পরের মাসের 0 তম দিন দেওয়াmktime(0, 0, 0, $month+1, 0, $year);
জর্জ

আমার হিসাবে, ব্যবহার strtotime()এবং mktime()নিরস্ত করা হয় বেক। মাস এবং লীপ বছরের ক্যালকুলেশনের প্রান্তে তারিখ নির্ধারণের মতো পরিচিত বাগগুলি। যেহেতু DateTimeউপলভ্য, ভবিষ্যতে কোনও সমস্যা এড়াতে আপনার এই শ্রেণিটি ব্যবহার করা উচিত। strtotime()mktime()
যেমনটি

@ PaulT.Rawkeen এই উত্তরটি 4 বছরেরও বেশি পুরানো। ইন্টারনেটের যে কোনও কিছুর মতো, প্রাসঙ্গিকতা এবং উপযোগিতা পরীক্ষা করার সময় বয়স একটি ফ্যাক্টর হওয়া উচিত। আরও, আইএমএইচও, প্রযুক্তির সাথে সম্পর্কিত যে কোনও কিছুর জন্য অর্ধেক সময় বিশেষভাবে কম।
nicc.org

@ নিকক.আরজি আমি একমত, বিশেষত সমস্ত প্রযুক্তিগত সমাধান এবং সমস্যাগুলি সমাধান করার উপায়গুলির জন্য জীবনের সময় সম্পর্কিত। এই বিশেষ ক্ষেত্রে, উত্তরের তুলনায় তুলনামূলকভাবে ভাল সংখ্যা রয়েছে এবং সম্ভবত, কেউ ( জুনিয়র প্রোগ্রামার ) এই উত্তরটিকে গ্রহণযোগ্য সমাধান হিসাবে বিবেচনা করবে। এটি সংক্ষিপ্ত এবং মার্জিত :) এবং সম্ভবত তিনি প্রত্যাশিত ফলাফল পাবেন, কিন্তু সময়ের সাথে সাথে, এই ধরণের সমস্যা সমাধানের এই উপায়টি জটিল হয়ে ওঠে এবং যখন সম্ভব হয় তখন আমাদের এই ধরণের ঘটনা সম্পর্কে সতর্ক করা উচিতদয়া আদায়
পল টি। রাউকেন

16

এটি ব্যবহার করে দেখুন, আপনি যদি পিএইচপি 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

আপনি মাসের শেষ দিনটি বেশ কয়েকটি উপায়ে খুঁজে পেতে পারেন। তবে কেবল আপনি পিএইচপি স্ট্রোটোটাইম () এবং তারিখ () ফাংশন ব্যবহার করে এটি করতে পারেন I আমি ভাবতে চাই যে আপনার চূড়ান্ত কোডটি এরকম কিছু দেখবে:

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

সরাসরি নমুনা

তবে আপনি যদি পিএইচপি> = 5.2 ব্যবহার করছেন তবে আমি দৃ strongly়ভাবে আপনাকে নতুন ডেটটাইম অবজেক্টটি ব্যবহার করার পরামর্শ দিচ্ছি। উদাহরণস্বরূপ নীচের মত:

$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);

আপনার ফাংশনটির জন্য ধন্যবাদ, এটি আমার প্রত্যাশার মতোই কাজ করে :)
ম্যানকোমোরাকোর্ট

7

আপনি যদি পিএইচপি ডেটটাইমের জন্য কার্বন এপিআই এক্সটেনশন ব্যবহার করেন তবে আপনি মাসের শেষ দিনটি সাথে পেতে পারেন:

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

প্রকৃতপক্ষে, আপনি -1 এ দিন নির্ধারণ করলে এটি শেষ কিন্তু একটি পাবে। সুতরাং শেষ দিনটি পেতে আপনাকে অবশ্যই 0 থেকে দিন নির্ধারণ করতে হবে। $date->day = 0;
জিওভান আফনসো

আপনাকে ধন্যবাদ জিওভ্যানএফোনসো যে সঠিক। আমি দিনটি 0 তে নির্ধারণ করেছি এবং উত্তরটি পরীক্ষা করেছি।
eaykin

1
আপনি যদি কার্বন ব্যবহার করে থাকেন তবে একটি ওয়ান-লাইন পদ্ধতির ব্যবহার হ'ল: কার্বন :: এখন () -> endOfMonth ()। যাইহোক, এন্ডঅফফোনথ () একটি সংশোধক, সুতরাং আপনার যদি কার্বনের তারিখ ধারণ করে একটি বিদ্যমান ভেরিয়েবল থাকে (বা তারিখটি সংশোধন করা হবে) তবে "ক্লোন" ব্যবহার করুন।
চার্লি ডালাসাস

4

আপনি ডেটটাইম সহ এটি ব্যবহার করতে পারেন

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

4
$date1 = $year.'-'.$month; 
$d = date_create_from_format('Y-m',$date1); 
$last_day = date_format($d, 't');

2

জেন্ড_ডেট ব্যবহার করা এটি বেশ সহজ:

$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")));

এমকেটাইম () ব্যবহার করা সময়ের সমস্ত দিকের সম্পূর্ণ নিয়ন্ত্রণের জন্য আমার যেতে ... আই

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

দিনটিকে 0 তে সেট করা এবং আপনার মাস 1 কে উপরে নিয়ে যাওয়া আপনাকে আগের মাসের শেষ দিন দেবে। 0 এবং negativeণাত্মক সংখ্যাগুলি বিভিন্ন যুক্তিতে একই রকম প্রভাব ফেলে। পিএইচপি: এমকিটাইম - ম্যানুয়াল

যেমনটি কেউ বলেছে যে স্ট্রোটোটাইম সবচেয়ে শক্তিশালী উপায় নয় এবং যদি কেউ সহজেই বহুমুখী না হয় তবে সামান্য।


1

আমি Cal_days_in_month সহ স্ট্রোটাইমটি নিম্নলিখিত হিসাবে ব্যবহার করছি:

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


0

এমকিটাইম এবং তারিখ নয় ('টি') ব্যবহার করে অন্য একটি উপায় :

$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 হলে হয় তা গণনা করে is


0

পিএইচপি ডেটটাইমের জন্য কার্বন এপিআই এক্সটেনশান

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";

কোডটি স্ব-বর্ণিত। সুতরাং আশা করি এটি সাহায্য করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.