strtotime ("sonraki yürüyüşü")

5 Cevap php

Burada garip bir sorun geçiyor.

Ben Mart gelme tarihi almak için çalışıyorum, ama çalışmak için görünmüyor.

$nextMarch = strtotime("next march");

Ne bu minik kod ile yanlış olabilir?

This is a question related to this question:
http://stackoverflow.com/questions/1872812/timestamp-of-nearest-valid-month

5 Cevap

Sana strtotime diğer bazı (ve / veya ek) bilgi vermek gerekecek sanırım.

Örneğin, Mart istediğiniz gün sayısı:

$nextMarch = strtotime("1 march");
var_dump($nextMarch, date('Y-m-d H:i:s', $nextMarch));

Ama bu sene mart alırsınız:

int 1235862000
string '2009-03-01 00:00:00' (length=19)

Yani, "bir sonraki" yürüyüşü, yani gelecek yıl almak için:

$nextMarch = strtotime("1 march +1 year");
var_dump($nextMarch, date('Y-m-d H:i:s', $nextMarch));

Ve sen olsun:

int 1267398000
string '2010-03-01 00:00:00' (length=19)

Yani, belki bu yıl veya önümüzdeki bir istemediğinizi bilmek, kendiniz bazı hesaplama yapmak gerekir. Böyle bir şey hile yapabilir:

$nextMarch = strtotime("1 march");
if ($nextMarch < time()) {
  $nextMarch = strtotime("1 march +1 year");
}
var_dump($nextMarch, date('Y-m-d H:i:s', $nextMarch));

(I don't really like this idea, but it seems to be working -- even though a simpler solution would definitely be nice...)

strtotime () o kadar akıllı değildir. Sadece sonraki veya son ile hafta içi yapabilirsiniz.

Kendimi bozma fazlasını yapmak için eğimli ve strtotime daha az güveniyor olurdu:

$thisYear = date("Y");
$nextYear = $thisYear + 1;
$nextMarch = date($yourFormat, strtotime("March 1, $nextYear"));

Eğer 'Mart gelme tarihi' ne demek? 31 Mart tarihleri ​​arasında (her gün için bir tane) topluluğudur.

Neyse, this example of strtotime() (çevrimiçi Manual) "geçerli ayın son günü" geri dönmek için, 'gelecek ay' kullanır

Bu bir göz değer olabilir.

Ben başka bir proje üzerinde benzer bir şey yapmak zorunda, burada yaptım:

function getNextMarch($timestamp) {



$fields = array();
$fields['timestamp'] = $timestamp;
$fields['unixtime'] = strtotime($timestamp);
$fields['current_month'] = date("m", $fields['unixtime']);
$fields['end_date_pre'] = new DateTime($fields['timestamp']);

switch ($fields['current_month']) {
    case 4 :
        $return = 11;
        break;
    case 5 :
        $return = 10;
        break;
    case 6 :
        $return = 9;
        break;
    case 7 :
        $return = 8;
        break;
    case 8 :
        $return = 7;
        break;
    case 9 :
        $return = 6;
        break;
    case 10 :
        $return = 5;
        break;
    case 11 :
        $return = 4;
        break;
    case 12 :
        $return = 3;
        break;
    case 1 :
        $return = 2;
        break;
    case 2 :
        $return = 1;
        break;
    case 3 :
        $return = 0;
        break;
}
$fields['str'] = $return . ' months';
if ($return > 1) {
    $fields['str'] = $return . ' month';
}

date_add($fields['end_date_pre'], date_interval_create_from_date_string($fields['str']));
return $fields['end_date_post'] = $fields['end_date_pre']->format('Y-m-d G:i:s');

}