Soru bir aya kadar artış tarihi


Şu formatta bir tarihim olduğunu varsayalım: 2010-12-11 (yıl-gün)

PHP ile, tarihi bir ay arttırmak istiyorum ve gerekirse yılın otomatik olarak artırılmasını istiyorum (yani Aralık 2012'den Ocak 2013'e kadar artış).

Saygılarımızla.


76
2018-05-20 00:15


Menşei




Cevaplar:


$time = strtotime("2010.12.11");
$final = date("Y-m-d", strtotime("+1 month", $time));

// Finally you will have the date you're looking for.

119
2018-05-20 00:45



Tüm tarihle çalışmıyor. Örneğin, 2013-05-31, Haziran ayı olan gelecek ay yerine Temmuz ayını görüntüler. - Patrick Desjardins
2014-01-31 için 2014-03-03'ü takip ediyorum. - Manish Goyal
Bu dizeyle çalışmadı: "2014-06-19 15:00:19" - Meetai.com
php.net/manual/en/function.strtotime.php Y-M-D strtotime'dır ("2010.12.11"); * (noktalar değil, çizgiler) - Joeri
Bu bazen kırılır. @Jason tarafından verilen cevap teknik olarak daha doğrudur çünkü artık yıllar, ay uzunlukları vb. Gibi şeyleri hesaba katar. Doğru cevap olarak işaretlenmelidir. - skift


Aylık bir döngü hariç (artı aylar, eksi 1 gün) benzer işlevlere ihtiyacım vardı. S.O. Bir süre için bu plug-n-play çözümünü yapabiliyordum:

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;
    }

Örnek:

$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

28
2018-06-03 11:55



Mükemmel, tam ihtiyacım olan şey. Bana çok zaman kazandırdığın için teşekkürler! - Tum
Hiç sorun değil, yararlı bulduğuna sevindim - Jason
Teşekkürler Jason, bu çok yardımcı oldu. Yeniden biçimlendirdim ve hepsini anlamama yardımcı olacak daha fazla yorum ekledim. Bu, herhangi birine yardımcı olursa, onu daha da aşağıya gönderdim (buraya eklemeye çalıştım ama çok uzun sürdü). - ScreenWatcher


kullanım DateTime::add.

$start = new DateTime("2010-12-11", new DateTimeZone("UTC"));
$month_later = clone $start;
$month_later->add(new DateInterval("P1M"));

kullandım klon çünkü ekleme, istenmeyebilecek orijinal nesneyi değiştirir.


23
2018-05-20 00:17



Bu işe yarıyor ama iade yöntemini ekleyeceğim. - Meetai.com


strtotime( "+1 month", strtotime( $time ) );

Bu, tarih işleviyle kullanılabilecek bir zaman damgası döndürür


11
2018-05-20 00:18



@Gelen: Bu işe yaramıyor, yanlış tarih veriyor .... Lütfen yönteminizi nasıl kullanacağınızı söyleyin, burada $ zamanının değeri nedir? - sqlchild
Bu işe yaramıyor, yanlış bir tarih veriyor .... Lütfen yönteminizi nasıl kullanacağınızı söyleyin, burada $ zamanının değeri nedir? - sqlchild
Kabul edilen cevap olarak aynı sorun. Tüm dizelerde çalışmaz. - Meetai.com
bu benim için çalışıyor (tabii ki $time başlangıç ​​değerine sahiptir). - tatskie


Ben bu şekilde kullanıyorum: -

 $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;
//******************************************************************//

5
2018-01-19 05:42



Benim için çalışıyor teşekkürler. Ancak, tarih ('m', strtotime ("+ 1 ay", strtotime ($ occDate))) ve tarih ('m', strtotime ("+ 1 ay", $ occDate)) aynı çalışır.
Hayır, ikisi de @ sah.cyBuzzSc. Örnek düşünelim: - $ occDate = '2014-12-28'; $ forOdNextMonth = tarih ('m', strtotime ("+ 1 ay", $ occDate)); $ ForOdNextMonth değeri 02'dir. - vineet
@chotesah için teşekkürler. İkinci örneğiniz oldukça iyi.


(date('d') > 28) ? date("mdY", strtotime("last day of next month")) : date("mdY", strtotime("+1 month"));

Bu, Şubat ve diğer 31 günlük ayları telafi edecektir. Tabii ki 'gelecek ay' için daha kesin olmak için daha fazla kontrol edebilirsiniz. nispi tarih formatları (ne yazık ki çalışmıyor, aşağıya bakın) ve DateTime'ı da kullanabilirsiniz.

Her ikisi de DateInterval('P1M') ve strtotime("+1 month") Bir sonraki aydaki gün sayısından bağımsız olarak, körü körüne 31 gün ekleniyor.

  • 2010-01-31 => 3 Mart
  • 2012-01-31 => 2 Mart (artık yıl)

4
2017-11-10 22:07



"Bir sonraki aydaki gün sayısından bağımsız olarak körü körüne 31 gün ekleniyor", kesinlikle doğru! (1). - Jose Manuel Abarca Rodríguez


Lütfen ilk önce tarih formatınızı 12-12-2012 olarak ayarlayın

Bu işlevi kullandıktan sonra düzgün çalışır;

$date =  date('d-m-Y',strtotime("12-12-2012 +2 Months");

Burada 12-12-2012 tarihiniz ve +2 Ay ayın artırılması;

Ayrıca Yıl, Tarihin artışını da

strtotime("12-12-2012 +1 Year");

Ans 12-12-2013


3
2017-11-15 09:32





Kullanabilirsiniz DateTime::modify bunun gibi :

$date = new DateTime('2010-12-11');
$date->modify('+1 month');

Belgelere bakınız:

http://php.net/manual/fr/datetime.modify.php

http://php.net/manual/fr/class.datetime.php


2
2017-11-01 11:49



bu yanlıştır 31 Mayıs - 1 Temmuz arası - ckonig
Evet gerçekten ... Bu sorunu çözmek için gönderimi düzenleyeceğim - HRoux