增加date一个月
假设我有以下格式的date:2010-12-11(year-mon-day)
使用PHP,我希望将date递增一个月,如果需要,我希望年份自动递增(即从2012年12月到2013年1月递增)。
问候。
$time = strtotime("2010.12.11"); $final = date("Ymd", strtotime("+1 month", $time)); // Finally you will have the date you're looking for.
我需要一个类似的function,除了我需要一个月的周期(加上几个月,减去1天)之后,我search了一段时间后,我能够制作这个即插即用解决scheme。
function add_months($months, DateTime $dateObject) { $next = new DateTime($dateObject->format('Ym-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 Ymd form $dateReturned = $newDate->format('Ym-d'); return $dateReturned; }
例:
$ startDate ='2014-06-03'; //以Ymd格式selectdate
$ nMonths = 1; / /select你想要前进多less个月
$ final = endCycle($ startDate,$ nMonths)//输出:2014-07-02
使用DateTime::add
。
$start = new DateTime("2010-12-11", new DateTimeZone("UTC")); $month_later = clone $start; $month_later->add(new DateInterval("P1M"));
我使用克隆,因为添加修改原来的对象,这可能是不希望的。
strtotime( "+1 month", strtotime( $time ) );
这会返回一个可以和date函数一起使用的时间戳
(date('d') > 28) ? date("mdY", strtotime("last day of next month")) : date("mdY", strtotime("+1 month"));
这将弥补2月份和另外31天的月份。 你当然可以做更多的检查,以获得更准确的“下个月的这一天”的相对date格式 (这并不令人伤心,见下文),你也可以使用DateTime。
DateInterval('P1M')
和strtotime("+1 month")
实际上是盲目地增加31天,而不pipe下个月的天数。
- 2010-01-31 =>三月三号
- 2012-01-31 => 3月2日(闰年)
我用这种方式:
$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; //******************************************************************//
请先把你的date格式设置为12-12-2012
使用此function后,它正常工作;
$date = date('dm-Y',strtotime("12-12-2012 +2 Months");
这里12-12-2012是你的date,+2个月是本月的增量;
您还增加了Year,Date
strtotime("12-12-2012 +1 Year");
Ans是12-12-2013
谢谢贾森,你的post非常有帮助。 我重新格式化了它,并添加了更多的评论来帮助我理解这一切。 如果有人帮助,我已经发布在这里:
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 Ymd $cycle_end_date = $cycle_end_date_object->format('Ym-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('Ym-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 (eg 31) is greater than last day of next month (eg 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 Ymd 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('Ym-d', $date)->format('N'); }
用法示例:
echo dayOfWeek(2016-12-22); // "4" echo dayOfWeek(date('Ym-d')); // "4"
$date = strtotime("2017-12-11"); $newDate = date("Ymd", strtotime("+1 month", $date));
如果你想增加几天,你也可以做到这一点
$date = strtotime("2017-12-11"); $newDate = date("Ymd", strtotime("+5 day", $date));
对于任何寻找任何date格式的答案的人。
echo date_create_from_format('d/m/Y', '15/04/2017')->add(new DateInterval('P1M'))->format('d/m/Y');
只需更改date格式。
使用DateTime ::修改如下:
$date = new DateTime('2010-12-11'); $date->modify('+1 mouth');
见文件: