2009-12-09 5 views
0

Juste un quickie .. Comment dériver l'unixtime de mars ou juin le plus proche?Horodatage du mois le plus proche valide

Si le mois en cours est Février 2009, le script devrait donner le unixtime 01 Mars de 2009.

Si le mois en cours est Avril 2009, le script devrait donner le unixtime 01 Juin de 2009.

Si le mois en cours est Octobre 2009, le script devrait donner le unixtime 01 Mars de 2010.

Merci pour toute aide!

Répondre

5

Mise à jour: Désolé, mon mauvais. "next" fonctionne avec des jours et dans des cas comme "next month" mais pas "next mars" donc c'est un peu plus alambiqué que le premier single original.

strtotime() est vraiment génial pour des choses comme ceci:

$tests = array(
    strtotime('2 february'), 
    strtotime('4 april'), 
    strtotime('9 november'), 
); 

foreach ($tests as $test) { 
    echo date('r', $test) . ' => ' . date('r', nextmj($test)) . "\n"; 
} 

function nextmj($time = time()) { 
    $march = strtotime('1 march', $time); 
    $june = strtotime('1 june', $time); 
    if ($march >= $time) { 
    return $march; 
    } else if ($june >= $time) { 
    return $june; 
    } else { 
    return strtotime('+1 year', $march); 
    } 
} 

Sortie:

Mon, 02 Feb 2009 00:00:00 +0000 => Sun, 01 Mar 2009 00:00:00 +0000 
Sat, 04 Apr 2009 00:00:00 +0000 => Mon, 01 Jun 2009 00:00:00 +0000 
Mon, 09 Nov 2009 00:00:00 +0000 => Mon, 01 Mar 2010 00:00:00 +0000 

Voir aussi What date formats does the PHP function strtotime() support?

+0

C'est exactement que je cherchais! Bravo pour le seul paquebot! – Nirmal

+0

Oups ... Mais strtotime ('next mars') ne fonctionne pas et ne jette même pas d'erreur. – Nirmal

+0

Hah, cela a résolu toute la requête! Merci. – Nirmal