$ tarih + 1 yıl?


91

Belirttiğim tarihten bir yıl sonra bir tarih almaya çalışıyorum.

Kodum şöyle görünüyor:

$futureDate=date('Y-m-d', strtotime('+one year', $startDate));

Yanlış tarihe dönüyor. Herhangi bir fikriniz neden?


9
Hatayı anlatmayı unuttun.
BalusC

Frank Farmer: o kadar emin misin? OP'nin isteklerini / yorumlarını beklemeyi tercih ederim.
BalusC

Dün gece bunu yayınlama acelemle açıklamayı unuttum - yanlış tarihi geri veriyordu. Afedersiniz! Yardımınız için teşekkürler.
Matt

1
Bunun yerine bunu kullanın strtotime ('+ 1 year', $ startDate));
casivaagustin

Yanıtlar:


98

Bugünün tarihine bir yıl eklemek için aşağıdakileri kullanın:

$oneYearOn = date('Y-m-d',strtotime(date("Y-m-d", mktime()) . " + 365 day"));

Diğer örnekler için $ StartDate'i bir zaman damgası değeriyle başlatmalısınız, örneğin:

$StartingDate = mktime();  // todays date as a timestamp

Bunu dene

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 365 day"));

veya

$newEndingDate = date("Y-m-d", strtotime(date("Y-m-d", strtotime($StaringDate)) . " + 1 year"));

"+1 yıl" yerine "+365" eklemek bunu yaptı. Teşekkürler!
Matt

17
Artık yıl olması durumunda bu kırılmaz mı?
Jeremy1026

1
PHP 5.1'den itibaren, bağımsız değişken olmadan çağrıldığında, mktime () bir E_STRICT uyarısı atar: onun yerine time () işlevini kullanın.
svandragt

Burada da olumsuz oy verildi. Bir gündeki saniye sayısı, bir yıldaki gün sayısı, bir yıldaki saniye sayısı vb. Hepsi değişkendir. 'Şu andan itibaren bir yıl' ile ilgileniyorsanız, 'bir yıl' arasını geçmeniz gerekir. Kendi başınıza alt bölümlere ayırmak, artık günler ve artık saniyeler ve gün ışığından tasarruf değişiklikleri etrafında hatalara yol açar. Daha kötüsü, flappy birim testlerine neden olur.
drobert

cevabım neden olumsuz oy verildi? $ addedoneyear = tarih ("y") + 1; // bir yıl eklemek için yanlış olan ne?
pathe.kiran

215
$futureDate=date('Y-m-d', strtotime('+1 year'));

$ futureDate şu andan itibaren bir yıl sonra!

$futureDate=date('Y-m-d', strtotime('+1 year', strtotime($startDate)) );

$ futureDate, $ startDate tarihinden itibaren bir yıldır!


$ StartDate zaten bir zaman damgasıysa (time () veya mktime () işleviyle daha önce oluşturulmuş biri gibi) ve bir dize değilse, strtotime'a sarmamalısınız yoksa çalışmayacaktır. Bunun yerine, $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));aşağıda belirtilen K Prime'ı yapın.
dallin

9

Deneyin: $futureDate=date('Y-m-d',strtotime('+1 year',$startDate));


Bu doğru cevabı döndürürken, diğeri de aslında bir hata vermez ... sadece yanlış tarih.
SeanJA

1
strtotime hata vermez. Bir hata durumunda yanlış döndürür.
Frank Farmer

Varsayılan saat dilimi ayarlanmadıysa PHP uyarılar atacak ... ama görünüşe göre kastettiği bu değil
SeanJA

Ben değişti Kodunuzdaki hatayı başlamıştı ,için .ve işe yaradı date("Y-m-d",strtotime('+1 year '.$startDate));
Muhammed Bilal

7
// Declare a variable for this year 
$this_year = date("Y");
// Add 1 to the variable
$next_year = $this_year + 1;
$year_after = $this_year + 2;

// Check your code
    echo "This year is ";
    echo $this_year;
    echo "<br />";
    echo "Next year is ";
    echo $next_year;
    echo "<br />";
    echo "The year after that is ";
    echo $year_after;

6

sadece aynı sorunu yaşadım, ancak bu en basit çözümdü:

<?php (date('Y')+1).date('-m-d'); ?>

Büyük, gelecek yıl için onu kullandığını: $next_year = (date('Y')+1).
Martin

5
//1 year from today's date
echo date('d-m-Y', strtotime('+1 year'));

//1 year from from specific date
echo date('22-09-Y', strtotime('+1 year'));

umarım bu daha basit kod parçası gelecekte birine yardımcı olur :)


4

OO yaklaşımını tercih ederim:

$date = new \DateTimeImmutable('today'); //'today' gives midnight, leave blank for current time.
$futureDate = $date->add(\DateInterval::createFromDateString('+1 Year'))

Kullanım DateTimeImmutableaksi takdirde çok özgün tarihini değiştirir! DateTimeImmutable hakkında daha fazla bilgi: http://php.net/manual/en/class.datetimeimmutable.php


Sadece bugünün tarihinden istiyorsan her zaman yapabilirsin:

new \DateTimeImmutable('-1 Month');

3

PHP 5.3 kullanıyorsanız, bunun nedeni varsayılan saat dilimini ayarlamanız gerekmesidir:

date_default_timezone_set()

3

strtotime()dönüyor bool(false), çünkü dizeyi ayrıştıramıyor '+one year'("bir" kelimesini anlamıyor). falsedaha sonra dolaylı olarak integerzaman damgasına atılır 0. Diğer işlevlere gitmeden önce strtotime()çıktısının olmadığını doğrulamak iyi bir fikirdir bool(false).

Dokümanlardan:

Dönen Değerler

Başarı durumunda bir zaman damgası döndürür, aksi takdirde FALSE. PHP 5.1.0'dan önce, bu işlev başarısızlık halinde -1 döndürürdü.


Evet, iyi nokta. Üretim kodum buna sahip olacak, ancak bunu çalıştırmaya çalışırken saçlarımı yırtıyordum, bu yüzden mümkün olduğunca az koda indirgedim. Teşekkürler!
Matt

2

Bunu dene

$nextyear  = date("M d,Y",mktime(0, 0, 0, date("m",strtotime($startDate)),   date("d",strtotime($startDate)),   date("Y",strtotime($startDate))+1));

1

Ayrıca daha basit ve daha az karmaşık bir çözüm var:

$monthDay = date('m/d');
$year = date('Y')+1;
$oneYearFuture = "".$monthDay."/".$year."";
echo"The date one year in the future is: ".$oneYearFuture."";

1

Benim çözümüm: date('Y-m-d', time()-60*60*24*365);

Şu tanımlarla daha "okunabilir" hale getirebilirsiniz:

define('ONE_SECOND', 1);
define('ONE_MINUTE', 60 * ONE_SECOND);
define('ONE_HOUR',   60 * ONE_MINUTE);
define('ONE_DAY',    24 * ONE_HOUR);
define('ONE_YEAR',  365 * ONE_DAY);

date('Y-m-d', time()-ONE_YEAR);

-1

Benim durumumda (mevcut tarihe 3 yıl eklemek istiyorum) çözüm şuydu:

$future_date = date('Y-m-d', strtotime("now + 3 years"));

Gardenee, Treby ve Daniel Lima'ya: 29 Şubat'ta ne olacak? Bazen Şubat sadece 28 gündür :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.