Intereting Posts
добавить в массив, если он еще не существует Как избавиться от исключения Unipot SoapFault: выглядит так, как будто у нас нет XML-документа в … "error Надежность Mimetypes в Uploads (PHP) Шифрование с помощью CryptoJS и расшифровка с помощью PHP PHP – Получить bool для эхо-фальшивости, когда false Именованная функция с несколькими аргументами в PHP Laravel ORM из таблицы саморегуляции получает N уровня иерархии JSON Страница регистрации и регистрации Laravel 5.5 говорит: страница истекла из-за неактивности. Объединение нескольких ассоциативных массивов в один массив ассоциативных массивов Есть ли способ обнаружить, существует ли таблица базы данных с Laravel как истечь сеанс php, если пользователь неактивен в течение 15 минут Неустранимая ошибка при обновлении Laravel 5.1 до 5.2 Как я могу заставить Laravel вернуть пользовательскую ошибку для API JSON REST Как загрузить последний файл на FTP с помощью PHP? Плагин AjaxFileUpload не извлекает данные $ _POST или $ _FILES

Как получить дату следующего месяца с сегодняшней даты и вставить ее в мою базу данных?

У меня есть два столбца в моем db: start_date и end_date , которые являются и типами DATE . Мой код обновляет даты следующим образом:

 $today_date = date("Ymd"); $end_date = date("Ymd"); // date +1 month ?? $sql1 = "UPDATE `users` SET `start_date` = '".$today_date."', `end_date` = '".$end_date."' WHERE `users`.`id` ='".$id."' LIMIT 1 ;"; 

Каков наилучший способ сделать $end_date равным $start_date + одному месяцу? Например, 2000-10 -01 станет 2000-11-11.

Solutions Collecting From Web of "Как получить дату следующего месяца с сегодняшней даты и вставить ее в мою базу данных?"

Вы можете использовать функцию strtotime () PHP:

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

Просто отметьте, что +1 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) 

Некоторые другие интервалы даты и времени, которые вы можете использовать:

 $date = date('Ym-d'); // Initial date string to use in calculation $date = date('Ym-d', strtotime('+1 day', strtotime($date))); $date = date('Ym-d', strtotime('+1 week', strtotime($date))); $date = date('Ym-d', strtotime('+2 week', strtotime($date))); $date = date('Ym-d', strtotime('+1 month', strtotime($date))); $date = date('Ym-d', strtotime('+30 days', strtotime($date))); 

Для этого вам действительно не нужны функции PHP. Вы уже можете выполнять простые манипуляции с датами непосредственно в SQL, например:

 $sql1 = " UPDATE `users` SET `start_date` = CURDATE(), `end_date` = DATE_ADD(CURDATE(), INTERVAL 1 MONTH) WHERE `users`.`id` = '" . $id . "'; "; 

См. http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_addtime

Принятый ответ работает, только если вы хотите ровно 31 день спустя. Это означает, что если вы используете дату «2013-05-31», которую вы ожидаете не в июне, чего я не хотел.

Если вы хотите иметь следующий месяц, я предлагаю вам использовать текущий год и месяц, но продолжайте использовать 1-й.

 $date = date("Ym-01"); $newdate = strtotime ( '+1 month' , strtotime ( $date ) ) ; 

Таким образом, вы сможете получить месяц и год следующего месяца без пропусков месяца.

Будьте осторожны, потому что иногда strtotime("+1 months") может пропускать номера месяцев.

Пример:

 $today = date("Ymd"); // 2012-01-30 $next_month = date("Ymd", strtotime("$today +1 month")); 

Если сегодня январь, в следующем месяце должен быть февраль, который имеет 28 или 29 дней, но PHP вернется в марте в следующем месяце, а не в феврале.

Если вы хотите указать конкретную дату в следующем месяце, вы можете сделать следующее:

 // Calculate the timestamp $expire = strtotime('first day of +1 month'); // Format the timestamp as a string echo date('m/d/Y', $expire); 

Обратите внимание, что это действительно работает более надежно, когда +1 month может ввести в заблуждение. Например…

 Current Day | first day of +1 month | +1 month --------------------------------------------------------------------------- 2015-01-01 | 2015-02-01 | 2015-02-01 2015-01-30 | 2015-02-01 | 2015-03-02 (skips Feb) 2015-01-31 | 2015-02-01 | 2015-03-03 (skips Feb) 2015-03-31 | 2015-04-01 | 2015-05-01 (skips April) 2015-12-31 | 2016-01-01 | 2016-01-31 

Вы можете использовать strtotime (), как в примере Gazler, что отлично подходит для этого случая.

Если вам нужно более сложное управление, используйте mktime () .

 $end_date = mktime(date("H"), date("i"), date("s"), date("n") + 1, date("j"), date("Y")); 

Эта функция возвращает любое правильное количество месяцев положительно или отрицательно. Найденный в разделе комментариев здесь :

 function addMonthsToTime($numMonths = 1, $timeStamp = null){ $timeStamp === null and $timeStamp = time();//Default to the present $newMonthNumDays = date('d',strtotime('last day of '.$numMonths.' months', $timeStamp));//Number of days in the new month $currentDayOfMonth = date('d',$timeStamp); if($currentDayOfMonth > $newMonthNumDays){ $newTimeStamp = strtotime('-'.($currentDayOfMonth - $newMonthNumDays).' days '.$numMonths.' months', $timeStamp); } else { $newTimeStamp = strtotime($numMonths.' months', $timeStamp); } return $newTimeStamp; } 

01-Feb-2014

 $date = mktime( 0, 0, 0, 2, 1, 2014 ); echo strftime( '%d %B %Y', strtotime( '+1 month', $date ) ); 

Я думаю, что это похоже на ответ kouton, но этот просто берет timeStamp и возвращает отметку времени SOMEWHERE в следующем месяце. Вы можете использовать дату («m», $ nextMonthDateN).

 function nextMonthTimeStamp($curDateN){ $nextMonthDateN = $curDateN; while( date("m", $nextMonthDateN) == date("m", $curDateN) ){ $nextMonthDateN += 60*60*24*27; } return $nextMonthDateN; //or return date("m", $nextMonthDateN); } 
 date("Ymd",strtotime("last day of +1 month",strtotime($anydate)))