Bir tarihe gün sayısı ekleyin


124

Güncel tarihe gün sayısı eklemek istiyorum: Aşağıdaki kodu kullanıyorum:

$i=30;
echo $date = strtotime(date("Y-m-d", strtotime($date)) . " +".$i."days");

Ama uygun tarih almak yerine şunu alıyorum: 2592000

Lütfen önerin.




4
etraflarında köşeli parantez bulunan etiket adlarını kullanarak arama yapın, örneğin [php] [date] addarama kutusunda. Bunun gibi birçok soruya cevap bulacaksınız.
Mikel

Yanıtlar:


247

Bu olmalı

echo date('Y-m-d', strtotime("+30 days"));

strtotime

ABD İngilizcesi tarih biçimini içeren bir dizenin verilmesini bekler ve bu biçimi şu anda verilen zaman damgasına göre bir Unix zaman damgasına (1 Ocak 1970 00:00:00 UTC'den bu yana geçen saniye sayısı) ya da şimdi verilmezse geçerli saat.

süre date

Verilen tamsayı zaman damgasını veya zaman damgası verilmemişse geçerli saati kullanarak verilen biçim dizesine göre biçimlendirilmiş bir dize döndürür.

İçin kılavuz sayfalarına bakın

ve işlev imzaları.


Bunun yaz saati uygulaması ve diğer eğlenceli takvim öğelerini geçerken sorunlara neden olacağını düşünüyorum. Bu, bağlama göre değişir. Gün ışığından yararlanma saati gününü geçerken sizi 23: 00'e götürebilecek 24 saatlik 30 blok arıyorsanız, düşünmeniz gerekir.
JJ Rohrer

1
@JJRohrer hayır, olmayacak. strtotimeyapılandırılan saat dilimi için herhangi bir DST'yi hesaba katacaktır. DST, yalnızca böyle bir şey yaptığınızda sorun olur: stackoverflow.com/questions/4066035
Gordon

Alınan nokta. Bu Soruya, başvurduğunuz soruya biraz daha yakın bir şeyi çözmeye çalışarak ulaştım. Umarım yukarıdaki yorumum başkalarının tarih hesaplamalarını ciddiye almalarını sağlar - tüm istisnaları unutmak kolaydır.
JJ Rohrer

64

Bu iyi olabilir

function addDayswithdate($date,$days){

    $date = strtotime("+".$days." days", strtotime($date));
    return  date("Y-m-d", $date);

}

4
Hızlı bir çözüme ihtiyacınız varsa ve bir işlev oluşturmak istemiyorsanız, yukarıdaki çözüm tek satırda da sıkıştırılabilir. echo date ("Ymd", strtotime ("+ 12days", strtotime (20130101)))
Mayank Jaiswal

46
$date = new DateTime();
$date->modify('+1 week');
print $date->format('Y-m-d H:i:s');

veya print date('Y-m-d H:i:s', mktime(date("H"), date("i"), date("s"), date("m"), date("d") + 7, date("Y"));


Bu yöntem, gün ışığından yararlanma süresini geçmeye yöneliktir. Php'nin artık saniyeler gibi diğer zaman tuhaflıkları için geçerli olup olmadığından emin değilim, ancak ihtiyaçlarınıza bağlı olarak, takvim günleriyle uğraşırsanız muhtemelen DateTime ve StrToTime'ı kullanmanız daha iyi olacaktır.
JJ Rohrer

@chx Bu çözüm ayrıca daha dikkatli bir tarihe izin verir; örneğin, yeni DateTime ('2016-12-09 10:35:58'); bu bir veritabanı zaman damgasından geliyor ...
mshaffer

10
$today=date('d-m-Y');
$next_date= date('d-m-Y', strtotime($today. ' + 90 days'));
echo $next_date;

10

Tarihin belirli bir tarihten 5 gün olmasını istiyorsanız, şöyle de ekleyebilirsiniz:

Bunun gibi bir tarihe sahip bir değişkeniniz var (bir girişten veya DB'den alınmış veya sadece sabit kodlanmış):

$today = "2015-06-15"; // Or can put $today = date ("Y-m-d");

$fiveDays = date ("Y-m-d", strtotime ($today ."+5 days"));

echo $fiveDays; // Will output 2015-06-20

7

Gün ışığından yararlanma saati nedeniyle saat değişikliklerinin yalnızca günleri hesaplarken size bazı sorunlar verebileceğini unutmayın.

İşte bununla ilgilenen küçük bir php işlevi:

function add_days($date, $days) {
    $timeStamp = strtotime(date('Y-m-d',$date));
    $timeStamp+= 24 * 60 * 60 * $days;

    // ...clock change....
    if (date("I",$timeStamp) != date("I",$date)) {
        if (date("I",$date)=="1") { 
            // summer to winter, add an hour
            $timeStamp+= 60 * 60; 
        } else {
            // summer to winter, deduct an hour
            $timeStamp-= 60 * 60;           
        } // if
    } // if
    $cur_dat = mktime(0, 0, 0, 
                      date("n", $timeStamp), 
                      date("j", $timeStamp), 
                      date("Y", $timeStamp)
                     ); 
    return $cur_dat;
}


6

Bunu zaman kodunu değiştirerek veya strtotime () kullanarak yapabilirsiniz . İşte strtotime kullanan bir örnek.

$ veri ['oluşturuldu'] = tarih ('Ymd H: i: s', strtotime ("+ 1 hafta"));


6

Strtotime () kullanabilirsiniz
$data['created'] = date('Y-m-d H:m:s', strtotime('+1 week'));


6

Bunun eski bir soru olduğunu biliyorum, ancak PHP <5.3 için şunu deneyebilirsiniz:

$date = '05/07/2013';
$add_days = 7;
$date = date('Y-m-d',strtotime($date) + (24*3600*$add_days)); //my preferred method
//or
$date = date('Y-m-d',strtotime($date.' +'.$add_days.' days');


5
$date = "04/28/2013 07:30:00";

$dates = explode(" ",$date);

$date = strtotime($dates[0]);

$date = strtotime("+6 days", $date);

echo date('m/d/Y', $date)." ".$dates[1];

4

Bunu deneyebilirsin.

$i=30;
echo  date("Y-m-d",mktime(0,0,0,date('m'),date('d')+$i,date('Y')));

3

Basit ve En İyi

echo date('Y-m-d H:i:s')."\n";
echo "<br>";
echo date('Y-m-d H:i:s', mktime(date('H'),date('i'),date('s'), date('m'),date('d')+30,date('Y')))."\n";

Bunu dene


3
//add the two day

$date = "**2-4-2016**"; //stored into date to variable

echo date("d-m-Y",strtotime($date.**' +2 days'**));

//print output
**4-4-2016**

2

Gün, ay veya yıl eklemek veya çıkarmak için bu addDate () işlevini kullanın (reformatDate () yardımcı işlevine de ihtiyacınız olacak)

/**
 * $date self explanatory
 * $diff the difference to add or subtract: e.g. '2 days' or '-1 month'
 * $format the format for $date
 **/
    function addDate($date = '', $diff = '', $format = "d/m/Y") {
        if (empty($date) || empty($diff))
            return false;
        $formatedDate = reformatDate($date, $format, $to_format = 'Y-m-d H:i:s');
        $newdate = strtotime($diff, strtotime($formatedDate));
        return date($format, $newdate);
    }
    //Aux function
    function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
        $date_aux = date_create_from_format($from_format, $date);
        return date_format($date_aux,$to_format);
    }

Not: sadece php> = 5.3 için



1
//Set time zone
date_default_timezone_set("asia/kolkata");
$pastdate='2016-07-20';
$addYear=1;
$addMonth=3;
$addWeek=2;
$addDays=5;
$newdate=date('Y-m-d', strtotime($pastdate.' +'.$addYear.' years +'.$addMonth. ' months +'.$addWeek.' weeks +'.$addDays.' days'));
echo $newdate;

1

Bu eski bir soru olsa da, bunu yapmanın bu yolu pek çok durumu gerektirecek ve sağlam görünüyor. PHP 5.3.0 veya üstüne sahip olmanız gerekir.

$EndDateTime = DateTime::createFromFormat('d/m/Y', "16/07/2017");
$EndDateTime->modify('+6 days');
echo $EndDateTime->format('d/m/Y');

Tarih dizesi için herhangi bir format türüne sahip olabilirsiniz ve bu işe yarar.

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.