2016-07-22 10 views
6

Mam mały problem z datami w PHP.Data plus miesiąc php

Kiedy zrobiłem 31 + 1 miesiącu styczniu z tym kodem

$newDate = date('Y-m-d', strtotime('31-01-2016'.' + 1 month')); 
echo $newDate; 

daje mi 2 marca, ale muszę dał mi 29 lutego

muszę dodać 1 miesiąc i nie jest 30 dni.

Ditto dla wszystkich dat: np 01 stycznia + 1 miesiąc => 1 lutego

29 stycznia + 1 miesiąc => 29 lutego

30 stycznia + 1 miesiąc => 29 lutego

31 stycznia + 1 miesiąc => 29 lutego

Dziękuję za pomoc

+0

29 lutego jest mniej niż jeden miesiąc po 30 stycznia. Nie widzę problemu. – apokryfos

+1

Mam nadzieję, że nie ma bezpośredniej funkcji w php, aby to osiągnąć ... – user1844933

+0

https://eval.in/610030 – splash58

Odpowiedz

5

Myślę, że szukasz tego typu dat.

<?php 
    $date = date('2016-01-31'); 
    $currentMonth = date("m",strtotime($date)); 
    $nextMonth = date("m",strtotime($date."+1 month")); 
    if($currentMonth==$nextMonth-1){ 
     $nextDate = date('Y-m-d',strtotime($date." +1 month")); 
    }else{ 
     $nextDate = date('Y-m-d', strtotime("last day of next month",strtotime($date))); 
    } 
    echo "Next date would be : $nextDate"; 
?> 

Sprawdź żywo demo: https://eval.in/610034

  1. Jeśli data jest 31-01-2016 potem następna data byłaby 29-02-2016
  2. Jeśli data jest 25-01-2016 potem następna data byłaby 25-02-2016
3

Wystarczy spróbować :

$date = new DateTime('2016-01-31'); 
$date->modify('last day of next month'); 

To oczywiście tylko się liczy, jeśli zawsze idziesz od końca jednej ćmy do końca następnej.

+1

Najpierw osobiście zrobię "miesiąc +1" i sprawdzę, czy nowy miesiąc nie jest "(poprzedni + 1)% 12", a potem zrób to. – apokryfos

+0

@apokryfos masz rację. Najlepiej byłoby użyć słowa "w przyszłym miesiącu", prawda? – Barthy

+0

Nie sądzę, że istnieje pojedyncza kalkulacja, aby uzyskać pożądany wynik, ponieważ jest to coś niestandardowego. – apokryfos

1

spróbować,

$date = "2016-01-29"; 
$date = date('Y-m-d', strtotime("last day of next month",strtotime($date))); 
echo $date; 

https://3v4l.org/Y9PpV

0

Jak o coś takiego:

date_default_timezone_set('UTC'); 

$current_month = (int) date('m'); 
$year = date('y'); 
$newDate = date('Y-m-d', strtotime('31-1-2016'.' + 1 month')); 

if($current_month == 12) 
{ 
    $new_month=0; 
    $year++; 
} 

$d = new DateTime($year.'-'.($current_month+1).'-01'); 
echo $d->format('Y-m-t')."\n"; 

Zmień $/$ current_month roku w oparciu o indywidualne potrzeby ......