::PHP DateTime ve ay çıkartılacak değiştir
Çok DateTime class
ile çalışıyorum ve son ay eklenirken bir hata olduğunu düşündüğüm şeyi koştu. Biraz araştırma sonra, bir hata değildi, ama istediği gibi çalışmak yerine, görünür. Belgelere göre buldu here:
#2 eklerken veya Dikkat örnek ay çıkarma
<?php
$date = new DateTime('2000-12-31');
$date->modify(' 1 month');
echo $date->format('Y-m-d') . "\n";
$date->modify(' 1 month');
echo $date->format('Y-m-d') . "\n";
?>
The above example will output: 2001-01-31 2001-03-03
Herkes bu bir hata olarak kabul değil neden haklı?
Ayrıca herkes her şık çözümler sorunu çözmek ve tekrar yapmak zorunda mı yani 1 ay amaçlandığı gibi yerine beklendiği gibi çalışır mı?
CEVAP
Neden bu bir hata değil:
Geçerli davranış doğru mu? Aşağıdaki içten olur:
1 month
ay sayısı (aslında 1) Bir artar. Bu tarih2010-02-31
yapar.İkinci ay (Şubat) sadece 1 Şubat'tan itibaren gün saymaya devam ederek 2010, PHP otomatik düzeltir bu 28 gün vardır. Daha sonra 3 Mart ulaştırıyor.
Ne istediğini elde etmek için:
İstediğini elde etmek için: el ile bir sonraki ay kontrol ediyorum. Sonra gün sayısını önümüzdeki ay ekleyin.
Kendini bu kod umarım. Sadece-için-ne veriyorum.
5.3 programlama:
Doğru davranış elde etmek için PHP kullanabilirsiniz göreli zaman first day of
dörtlük tanıtan 5.3 yeni işlevsellik. Bu dörtlük next month
, fifth month
8 months
ile birlikte belirtilen ayın ilk günü gitmek için kullanılabilir. Ne yaptığını 1 month
yerine, bu kod, bu gibi bir sonraki ayın ilk günü almak için kullanabilirsiniz:
<?php
$d = new DateTime( '2010-01-31' );
$d->modify( 'first day of next month' );
echo $d->format( 'F' ), "\n";
?>
Bu senaryo doğru February
çıktı. Şunları PHP bu işler first day of next month
dörtlük oldu:
next month
ay sayısı (aslında 1) Bir artar. Bu tarih 2010-02-31 yapar.first day of
1
tarih 2010-02-01 sonuçlanan gün sayısını ayarlar.
Datetime, zaman Damgası arasında dönüş...
dizinin gıt mv ve yalnızca büyük / küç...
Arama Vim ve seçili metni değiştir...
Datetime değeri almak için Nasıl.Pytho...
DateTime.Eğer bir tarih 30 günden daha...