Скажем, у меня есть дата в следующем формате: 2010-12-11 (год-день-день)
С PHP я хочу увеличить дату на месяц, и я хочу, чтобы год был автоматически увеличен, если необходимо (т.е. увеличивался с декабря 2012 года по январь 2013 года).
С уважением.
Скажем, у меня есть дата в следующем формате: 2010-12-11 (год-день-день)
С PHP я хочу увеличить дату на месяц, и я хочу, чтобы год был автоматически увеличен, если необходимо (т.е. увеличивался с декабря 2012 года по январь 2013 года).
С уважением.
$time = strtotime("2010.12.11");
$final = date("Y-m-d", strtotime("+1 month", $time));
// Finally you will have the date you're looking for.
		Мне нужна была аналогичная функциональность, за исключением месячного цикла (плюс месяцы, минус 1 день). После некоторого поиска в SO, я смог создать это решение plug-n-play:
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
		Используйте DateTime::add.
$start = new DateTime("2010-12-11", new DateTimeZone("UTC"));
$month_later = clone $start;
$month_later->add(new DateInterval("P1M"));
Я использовал clone, потому что добавление изменяет исходный объект, что может быть нежелательно.
strtotime( "+1 month", strtotime( $time ) );
это возвращает метку времени, которая может использоваться с функцией даты
Я использую этот способ: -
 $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;
//******************************************************************//
		 Вы можете использовать DateTime::modify так:
$date = new DateTime('2010-12-11');
$date->modify('+1 month');
 Смотрите документацию:
(date('d') > 28) ? date("mdY", strtotime("last day of next month")) : date("mdY", strtotime("+1 month"));
Это компенсирует февраль и другие 31-дневные месяцы. Конечно, вы могли бы сделать гораздо больше проверки, чтобы более точно определить "этот день в следующем месяце" относительные форматы дат (что не работает печально, см. ниже), и вы могли бы также использовать DateTime.
Оба DateInterval('P1M') и strtotime("+1 month") по существу слепо добавляют 31 день независимо от количества дней в следующем месяце.
Пожалуйста, сначала установите формат даты как 12-12-2012
После использования этой функции он работает правильно;
$date =  date('d-m-Y',strtotime("12-12-2012 +2 Months");
Здесь 12-12-2012 - ваша дата и +2 месяца - это увеличение месяца;
Вы также увеличиваете Year, Date
strtotime("12-12-2012 +1 Year");
Ans 12-12-2013
$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));
		Спасибо Джейсон, ваш пост был очень полезен. Я переформатировал его и добавил больше комментариев, чтобы помочь мне понять все это. Если это кому-то поможет, я разместил его здесь:
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
		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"
		Для тех, кто ищет ответ на любой формат даты.
echo date_create_from_format('d/m/Y', '15/04/2017')->add(new DateInterval('P1M'))->format('d/m/Y');
Просто измените формат даты.
 Все представленные решения не работают должным образом. 
 strtotime() и DateTime :: add или DateTime :: modify дают неверные результаты. 
 Примеры: 
 - 31.08.2019 + 1 месяц дает 01.10.2019 вместо 30.09.2019 
 - 29.02.2020 + 1 год дает 01.03.2021 вместо 28.02.2021 
 (проверено на PHP 5.5, PHP 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)
		введите дату в поле ввода, затем нажмите кнопку получить день от даты в 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()]);
    });  
             });
		 <?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>'; ?>