How do I get next month date from today's date and insert it in my database?

后端 未结 13 563
我寻月下人不归
我寻月下人不归 2021-02-01 15:07

I have two columns in my db: start_date and end_date, which are both DATE types. My code is updating the dates as follows:



        
相关标签:
13条回答
  • 2021-02-01 15:11

    I think this is similar to kouton's answer, but this one just takes in a timeStamp and returns a timestamp SOMEWHERE in the next month. You could use date("m", $nextMonthDateN) from there.

    function nextMonthTimeStamp($curDateN){ 
       $nextMonthDateN = $curDateN;
       while( date("m", $nextMonthDateN) == date("m", $curDateN) ){
          $nextMonthDateN += 60*60*24*27;
       }
       return $nextMonthDateN; //or return date("m", $nextMonthDateN);
    }
    
    0 讨论(0)
  • 2021-02-01 15:12

    $nextm = date('m', strtotime('+1 month', strtotime(date('Y-m-01'))));

    0 讨论(0)
  • 2021-02-01 15:14

    I know - sort of late. But I was working at the same problem. If a client buys a month of service, he/she expects to end it a month later. Here's how I solved it:

        $now = time(); 
        $day = date('j',$now);
        $year = date('o',$now);
        $month = date('n',$now);
        $hour = date('G');
        $minute = date('i');
        $month += $count;
        if ($month > 12)        {
                $month -= 12;
                $year++; 
                }
        $work = strtotime($year . "-" . $month . "-01");
        $avail = date('t',$work);
        if ($day > $avail)
                $day = $avail;
        $stamp = strtotime($year . "-" . $month . "-" . $day . " " . $hour . ":" . $minute);
    

    This will calculate the exact day n*count months from now (where count <= 12). If the service started March 31, 2019 and runs for 11 months, it will end on Feb 29, 2020. If it runs for just one month, the end date is Apr 30, 2019.

    0 讨论(0)
  • 2021-02-01 15:16

    Adding my solution here, as this is the thread that comes in google search. This is to get the next date of month, fixing any skips, keeping the next date within next month.

    PHP adds current months total number of days to current date, if you do +1 month for example.

    So applying +1 month to 30-01-2016 will return 02-03-2016. (Adding 31 days)

    For my case, I needed to get 28-02-2016, so as to keep it within next month. In such cases you can use the solution below.

    This code will identify if the given date's day is greater than next month's total days. If so It will subtract the days smartly and return the date within the month range.

    Do note the return value is in timestamp format.

    function getExactDateAfterMonths($timestamp, $months){
        $day_current_date            = date('d', $timestamp);
        $first_date_of_current_month = date('01-m-Y', $timestamp);
        // 't' gives last day of month, which is equal to no of days
        $days_in_next_month          = date('t',  strtotime("+".$months." months", strtotime($first_date_of_current_month)));
    
        $days_to_substract = 0;
        if($day_current_date > $days_in_next_month)
             $days_to_substract = $day_current_date - $days_in_next_month;
    
        $php_date_after_months   = strtotime("+".$months." months", $timestamp);
        $exact_date_after_months = strtotime("-".$days_to_substract." days", $php_date_after_months);
    
        return $exact_date_after_months;
    }
    
    getExactDateAfterMonths(strtotime('30-01-2016'), 1);
    // $php_date_after_months   => 02-03-2016
    // $exact_date_after_months => 28-02-2016
    
    0 讨论(0)
  • You can use strtotime() as in Gazler's example, which is great for this case.

    If you need more complicated control use mktime().

    $end_date = mktime(date("H"), date("i"), date("s"), date("n") + 1, date("j"), date("Y"));
    
    0 讨论(0)
  • 2021-02-01 15:19

    You can use PHP's strtotime() function:

    // One month from today
    $date = date('Y-m-d', strtotime('+1 month'));
    
    // One month from a specific date
    $date = date('Y-m-d', strtotime('+1 month', strtotime('2015-01-01')));
    

    Just note that +1 month is not always calculated intuitively. It appears to always add the number of days that exist in the current month.

    Current Date  | +1 month
    -----------------------------------------------------
    2015-01-01    | 2015-02-01   (+31 days)
    2015-01-15    | 2015-02-15   (+31 days)
    2015-01-30    | 2015-03-02   (+31 days, skips Feb)
    2015-01-31    | 2015-03-03   (+31 days, skips Feb)
    2015-02-15    | 2015-03-15   (+28 days)
    2015-03-31    | 2015-05-01   (+31 days, skips April)
    2015-12-31    | 2016-01-31   (+31 days)
    

    Some other date/time intervals that you can use:

    $date = date('Y-m-d'); // Initial date string to use in calculation
    
    $date = date('Y-m-d', strtotime('+1 day', strtotime($date)));
    $date = date('Y-m-d', strtotime('+1 week', strtotime($date)));
    $date = date('Y-m-d', strtotime('+2 week', strtotime($date)));
    $date = date('Y-m-d', strtotime('+1 month', strtotime($date)));
    $date = date('Y-m-d', strtotime('+30 days', strtotime($date)));
    
    0 讨论(0)
提交回复
热议问题