এক মাস বাড়ানোর তারিখ


103

ধরা যাক আমার নীচের ফর্ম্যাটটিতে একটি তারিখ রয়েছে: ২০১০-১২-১১ (বছর-সোমবার)

পিএইচপি দিয়ে আমি তারিখটি এক মাস বাড়িয়ে দিতে চাই এবং প্রয়োজনে বছরের সাথে স্বয়ংক্রিয়ভাবে বর্ধিত হওয়া চাই (অর্থাত ডিসেম্বর ২০১২ থেকে জানুয়ারী ২০১৩ পর্যন্ত ইনক্রিমেন্টিং)।

শুভেচ্ছা।

উত্তর:


167
$time = strtotime("2010.12.11");
$final = date("Y-m-d", strtotime("+1 month", $time));

// Finally you will have the date you're looking for.

31
এটি সমস্ত তারিখের সাথে কাজ করে না। উদাহরণস্বরূপ, ২০১৩-০৫-৩১ পরবর্তী মাসের পরিবর্তে জুলাই প্রদর্শিত হবে যা জুন।
প্যাট্রিক দেশজার্ডিন্স 21

1
2014-01-31 কারণে আমি 2014-03-03 অনুসরণ করছি?
মনীশ গোয়েল

এটি এই স্ট্রিংটির সাথে কাজ করে নি: "2014-06-19 15:00:19"
মিলাই ডটকম

1
এটি মাঝে মাঝে বিরতি দেয়। @ জেসনের উত্তরটি প্রযুক্তিগতভাবে আরও সঠিক কারণ এটি লিপ বছর, মাসের দৈর্ঘ্য ইত্যাদির মতো বিষয়গুলির জন্য অ্যাকাউন্ট করে। এটি সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত।
স্কিফ্ট করুন

4
এই উত্তরটি বিপজ্জনক কারণ এটি "মাসের শেষ দিন" পরিস্থিতিতে ব্যর্থ হয়েছে যা সনাক্ত করা শক্ত।
ckonig

43

আমার একই রকম কার্যকারিতা প্রয়োজন, একটি মাসিক চক্র ব্যতীত (আরও মাস, বিয়োগ 1 দিন)। কিছুক্ষণ অনুসন্ধান করার পরে, আমি এই প্লাগ-এন-প্লে সমাধানটি তৈরি করতে সক্ষম হয়েছি:

function add_months($months, DateTime $dateObject) 
    {
        $next = new DateTime($dateObject->format('Y-m-d'));
        $next->modify('last day of +'.$months.' month');

        if($dateObject->format('d') > $next->format('d')) {
            return $dateObject->diff($next);
        } else {
            return new DateInterval('P'.$months.'M');
        }
    }

function endCycle($d1, $months)
    {
        $date = new DateTime($d1);

        // call second function to add the months
        $newDate = $date->add(add_months($months, $date));

        // goes back 1 day from date, remove if you want same day of month
        $newDate->sub(new DateInterval('P1D')); 

        //formats final date to Y-m-d form
        $dateReturned = $newDate->format('Y-m-d'); 

        return $dateReturned;
    }

উদাহরণ:

$startDate = '2014-06-03'; // select date in Y-m-d format
$nMonths = 1; // choose how many months you want to move ahead
$final = endCycle($startDate, $nMonths); // output: 2014-07-02

3
দুর্দান্ত, ঠিক আমার যা দরকার ছিল আমাকে অনেক সময় বাঁচানোর জন্য ধন্যবাদ!
তুম

কোনও সমস্যা নেই, আপনি এটি দরকারী হিসাবে খুশী
জেসন

ধন্যবাদ জেসন, এটি খুব সহায়ক ছিল। আমি এটিকে পুনরায় ফর্ম্যাট করেছি এবং এগুলি সমস্ত কিছু বুঝতে আমাকে সহায়তা করার জন্য আরও মন্তব্য যুক্ত করেছি। যদি কাউকে সহায়তা করে তবে আমি এটিকে আরও নিচে পোস্ট করেছি (এটি এখানে যুক্ত করার চেষ্টা করেছি তবে এটি অনেক দীর্ঘ ছিল)।
গ্রেগ

1
এটি 30 জানুয়ারী এবং 31 জানুয়ারীর জন্য একই মান দেয়!
স্যাটিস

কবজির মতো কাজ করে, এটি 2020 সালের 1 জানুয়ারীর মধ্যে 31 ডিসেম্বর থেকে পরীক্ষিত হয়েছে, ধন্যবাদ!
পল নওক 15

34

ব্যবহার DateTime::add

$start = new DateTime("2010-12-11", new DateTimeZone("UTC"));
$month_later = clone $start;
$month_later->add(new DateInterval("P1M"));

আমি ক্লোন ব্যবহার করেছি কারণ যুক্তটি আসল বস্তুকে পরিবর্তন করে, যা পছন্দসই নয়।


1
কাজ করে না .. (নতুন ডেটটাইম ("2010-01-31", নতুন ডেটটাইমজোন ("ইউটিসি"))) -> অ্যাড (নতুন ডেটইন্টারওয়াল ("পি 1 এম")) -> ফর্ম্যাট ('Ym-d') ফলাফল 2010-03-03
স্কোল্টজ

13
strtotime( "+1 month", strtotime( $time ) );

এটি একটি টাইমস্ট্যাম্প ফিরিয়ে দেয় যা তারিখ ফাংশনের সাথে ব্যবহার করা যেতে পারে


@ জেলেন: এটি কাজ করে না, ভুল তারিখ দেয় .... দয়া করে আপনার পদ্ধতিটি কীভাবে ব্যবহার করবেন তা বলুন, এখানে $ সময়ের মূল্য কী?
স্ক্লচাইল্ড

এটি কার্যকর হয় না, ভুল তারিখ দেয় .... দয়া করে আপনার পদ্ধতিটি কীভাবে ব্যবহার করবেন তা বলুন, এখানে $ সময়ের মূল্য কত?
স্ক্লচাইল্ড

গৃহীত উত্তর হিসাবে একই সমস্যা সমস্ত স্ট্রিং উপর কাজ করে না।
মিলাই ডটকম

এটি আমার পক্ষে কাজ করে (অবশ্যই $timeপ্রাথমিক মান আছে)।
tatskie

6
(date('d') > 28) ? date("mdY", strtotime("last day of next month")) : date("mdY", strtotime("+1 month"));

এটি ফেব্রুয়ারি এবং অন্যান্য 31 দিনের মাসের জন্য ক্ষতিপূরণ দেবে। আপনি অবশ্যই 'সামনের মাসের এই দিন' সম্পর্কিত তুলনামূলক তারিখের ফর্ম্যাটগুলি (যা দুঃখের সাথে কাজ করে না, নীচে দেখুন) এর জন্য আরও সঠিক পেতে আরও অনেক বেশি পরীক্ষা করতে পারবেন এবং ডেটটাইমটি আপনি ঠিক পাশাপাশি ব্যবহার করতে পারেন could

উভয়ই DateInterval('P1M')এবং strtotime("+1 month")পরের মাসে বেশিরভাগ দিনের সংখ্যা নির্বিশেষে অন্ধভাবে 31 দিন যুক্ত করছে।

  • 2010-01-31 => ২ য় মার্চ
  • 2012-01-31 => ২ রা মার্চ (লিপ বছর)

3
"পরের মাসে বেশিরভাগ দিন নির্বিশেষে 31 দিন অন্ধভাবে যোগ করুন", একেবারে ঠিক! (+1 টি)।
হোসে ম্যানুয়েল অ্যাবারকা রদ্রিগেজ

6

আপনি এটির DateTime::modifyমতো ব্যবহার করতে পারেন :

$date = new DateTime('2010-12-11');
$date->modify('+1 month');

ডকুমেন্টেশন দেখুন:

http://php.net/manual/fr/datetime.modify.php

http://php.net/manual/fr/class.datetime.php


1
31 শে মে থেকে 1 জুলাই পর্যন্ত এই লাফ দেয় যা ভুল
'11

হ্যাঁ সত্যিই ... আমি এই সমস্যাটি সমাধান করার জন্য আমার পোস্টটি সম্পাদনা করব
এইচআরক্স

5

আমি এইভাবে ব্যবহার করি: -

 $occDate='2014-01-28';
 $forOdNextMonth= date('m', strtotime("+1 month", strtotime($occDate)));
//Output:- $forOdNextMonth=02


/*****************more example****************/
$occDate='2014-12-28';

$forOdNextMonth= date('m', strtotime("+1 month", strtotime($occDate)));
//Output:- $forOdNextMonth=01

//***********************wrong way**********************************//
$forOdNextMonth= date('m', strtotime("+1 month", $occDate));
  //Output:- $forOdNextMonth=02; //instead of $forOdNextMonth=01;
//******************************************************************//

1
এটা আমার জন্য কাজ ধন্যবাদ। তবে, তারিখ ('এম', স্ট্রোটোটাইম ("+ 1 মাস", স্ট্রোটোটাইম ($ আকসেট))) এবং তারিখ ('এম', স্ট্রোটোটাইম ("+ 1 মাস", $ আকস্মিক তারিখ)) একই কাজ করে।

1
না, উভয়ই পার্থক্য @ sah.cyBuzzSc। উদাহরণ বিবেচনা করুন: - D occDate = '2014-12-28'; O forOdNextMonth = তারিখ ('মি', স্ট্রোটোটাইম ("+ 1 মাস", $ আকস্মিক তারিখ)); ওডনেক্সটমনেথের মান 02 0 হয়
ভিনেটা

@ চোটেসাহ ব্যাখ্যা করার জন্য ধন্যবাদ আপনার দ্বিতীয় উদাহরণটি বেশ ভাল।

3

দয়া করে প্রথমে আপনার তারিখের ফর্ম্যাটটি 12-12-2012 এর মতো সেট করুন

এই ফাংশনটি ব্যবহারের পরে এটি সঠিকভাবে কাজ করছে;

$date =  date('d-m-Y',strtotime("12-12-2012 +2 Months");

এখানে 12-12-2012 আপনার তারিখ এবং +2 মাস মাসের বৃদ্ধি;

আপনি বছরের বর্ধিত, তারিখ

strtotime("12-12-2012 +1 Year");

উত্তর 12-12-2013


1

ধন্যবাদ জেসন, আপনার পোস্টটি খুব সহায়ক ছিল। আমি এটিকে পুনরায় ফর্ম্যাট করেছি এবং এগুলি সমস্ত কিছু বুঝতে আমাকে সহায়তা করার জন্য আরও মন্তব্য যুক্ত করেছি। যে কাউকে সহায়তা করে সে ক্ষেত্রে আমি এখানে এটি পোস্ট করেছি:

function cycle_end_date($cycle_start_date, $months) {
    $cycle_start_date_object = new DateTime($cycle_start_date);

    //Find the date interval that we will need to add to the start date
    $date_interval = find_date_interval($months, $cycle_start_date_object);

    //Add this date interval to the current date (the DateTime class handles remaining complexity like year-ends)
    $cycle_end_date_object = $cycle_start_date_object->add($date_interval);

    //Subtract (sub) 1 day from date
    $cycle_end_date_object->sub(new DateInterval('P1D')); 

    //Format final date to Y-m-d
    $cycle_end_date = $cycle_end_date_object->format('Y-m-d'); 

    return $cycle_end_date;
}

//Find the date interval we need to add to start date to get end date
function find_date_interval($n_months, DateTime $cycle_start_date_object) {
    //Create new datetime object identical to inputted one
    $date_of_last_day_next_month = new DateTime($cycle_start_date_object->format('Y-m-d'));

    //And modify it so it is the date of the last day of the next month
    $date_of_last_day_next_month->modify('last day of +'.$n_months.' month');

    //If the day of inputted date (e.g. 31) is greater than last day of next month (e.g. 28)
    if($cycle_start_date_object->format('d') > $date_of_last_day_next_month->format('d')) {
        //Return a DateInterval object equal to the number of days difference
        return $cycle_start_date_object->diff($date_of_last_day_next_month);
    //Otherwise the date is easy and we can just add a month to it
    } else {
        //Return a DateInterval object equal to a period (P) of 1 month (M)
        return new DateInterval('P'.$n_months.'M');
    }
}

$cycle_start_date = '2014-01-31'; // select date in Y-m-d format
$n_months = 1; // choose how many months you want to move ahead
$cycle_end_date = cycle_end_date($cycle_start_date, $n_months); // output: 2014-07-02

1
$date = strtotime("2017-12-11");
$newDate = date("Y-m-d", strtotime("+1 month", $date));

আপনি যদি দিনগুলি বর্ধন করতে চান তবে এটিও করতে পারেন

$date = strtotime("2017-12-11");
$newDate = date("Y-m-d", strtotime("+5 day", $date));

1

মাসের কোনও তারিখের পরে তারিখ সন্ধানের জন্য সহজ পদ্ধতির সাথে উত্তরটি আপডেট করা। হিসাবে চিহ্নিত সেরা উত্তর সঠিক সমাধান দেয় না।

<?php

    $date = date('2020-05-31');
    $current = date("m",strtotime($date));
    $next = date("m",strtotime($date."+1 month"));
    if($current==$next-1){
        $needed = date('Y-m-d',strtotime($date." +1 month"));
    }else{
        $needed = date('Y-m-d', strtotime("last day of next month",strtotime($date)));
    }
    echo "Date after 1 month from 2020-05-31 would be : $needed";

?>

শুধুমাত্র এটিই +1 মাসের তারিখের সঠিক সমাধান।
asad অ্যাপ্লিকেশন

0
function dayOfWeek($date){
    return DateTime::createFromFormat('Y-m-d', $date)->format('N');
}

ব্যবহারের উদাহরণ:

echo dayOfWeek(2016-12-22);
// "4"
echo dayOfWeek(date('Y-m-d'));
// "4"

0

যে কোনও তারিখের ফর্ম্যাটটির উত্তর খুঁজছেন For

echo date_create_from_format('d/m/Y', '15/04/2017')->add(new DateInterval('P1M'))->format('d/m/Y');

কেবল তারিখের ফর্ম্যাটটি পরিবর্তন করুন।


-2

ইনপুট বাক্সে একটি তারিখ রাখুন তারপরে jquery এ তারিখ থেকে দিন বোতামটি ক্লিক করুন

$(document).ready( function() {
    $("button").click(function(){   
    var day = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
    var a = new Date();
    $(".result").text(day[a.getDay()]);

    });  
             });

-2
 <?php
              $selectdata ="select fromd,tod  from register where username='$username'";
            $q=mysqli_query($conm,$selectdata);
            $row=mysqli_fetch_array($q);

            $startdate=$row['fromd']; 
            $stdate=date('Y', strtotime($startdate));  

            $endate=$row['tod']; 
            $enddate=date('Y', strtotime($endate));  

            $years = range ($stdate,$enddate);
            echo '<select name="years" class="form-control">';
            echo '<option>SELECT</option>';
            foreach($years as $year)
              {   echo '<option value="'.$year.'"> '.$year.' </option>';  }
                echo '</select>'; ?>

2
কপি পেস্টিং কোড সবসময় সাহায্য করে না। আপনার কোডটিও কিছুটা ব্যাখ্যা করা উচিত।
mrkernelpanic

-2

উপস্থাপিত সমস্ত সমাধান সঠিকভাবে কাজ করছে না।
স্ট্রোটটাইম () এবং ডেটটাইম :: অ্যাড বা ডেটটাইম :: সংশোধন করুন কিছু সময় অবৈধ ফলাফল দেয়।
উদাহরণ:
- 31.08.2019 + 1 মাস 30.09.2019 এর পরিবর্তে 01.10.2019 দেয়
- 29.02.2020 + 1 বছর 28.02.2021 এর পরিবর্তে 01.03.2021 দেয়
(পিএইচপি 5.5, পিএইচপি 7.3 এ পরীক্ষিত)

নীচে অ্যাঞ্জেলো দ্বারা পোস্ট করা ধারণার ভিত্তিতে আমার ফাংশন যা সমস্যার সমাধান করে:

// $time - unix time or date in any format accepted by strtotime() e.g. 2020-02-29  
// $days, $months, $years - values to add
// returns new date in format 2021-02-28
function addTime($time, $days, $months, $years)
{
    // Convert unix time to date format
    if (is_numeric($time))
    $time = date('Y-m-d', $time);

    try
    {
        $date_time = new DateTime($time);
    }
    catch (Exception $e)
    {
        echo $e->getMessage();
        exit;
    }

    if ($days)
    $date_time->add(new DateInterval('P'.$days.'D'));

    // Preserve day number
    if ($months or $years)
    $old_day = $date_time->format('d');

    if ($months)
    $date_time->add(new DateInterval('P'.$months.'M'));

    if ($years)
    $date_time->add(new DateInterval('P'.$years.'Y'));

    // Patch for adding months or years    
    if ($months or $years)
    {
        $new_day = $date_time->format("d");

        // The day is changed - set the last day of the previous month
        if ($old_day != $new_day)
        $date_time->sub(new DateInterval('P'.$new_day.'D'));
    }
    // You can chage returned format here
    return $date_time->format('Y-m-d');
}

ব্যবহারের উদাহরণ:

echo addTime('2020-02-29', 0, 0, 1); // add 1 year (result: 2021-02-28)
echo addTime('2019-08-31', 0, 1, 0); // add 1 month (result: 2019-09-30)
echo addTime('2019-03-15', 12, 2, 1); // add 12 days, 2 months, 1 year (result: 2019-09-30)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.