Wie würde ich den letzten Tag des Monats Fehler zu beheben, die mit dieser PHP-Code zur Folge haben?

StackOverflow https://stackoverflow.com/questions/762106

  •  11-09-2019
  •  | 
  •  

Frage

Der folgende Code ist, was für eine Website Menü Ich verwende, die auf der Änderung des Monats auf den Link für den aktuellen Monat Seite oben auf der Linkliste bewegt.

Aber das scheitert am 31. einigen Monaten, wie April; Ich bekomme zwei Links zum gleichen Monat für die meisten der Links. Ich habe mit der Art und Weise php erzeugt Daten durch die Fragen lesen, kann aber nicht herausfinden, wie Sie diesen Code ändern.

Jeder php Ph.D der Mangel einen Stich an, es zu nehmen? Dank

<?php $month1 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+1 , date('d'), date('Y'))));
$month2 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+2 , date('d'), date('Y'))));
$month3 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+3 , date('d'), date('Y'))));
$month4 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+4 , date('d'), date('Y'))));
$month5 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+5 , date('d'), date('Y'))));
$month6 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+6 , date('d'), date('Y'))));
$month7 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+7 , date('d'), date('Y'))));
$month8 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+8 , date('d'), date('Y'))));
$month9 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+9 , date('d'), date('Y'))));
$month10 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+10 , date('d'), date('Y'))));
$month11 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+11 , date('d'), date('Y')))); ?>

<a href="http://mydomain.com/<?php echo strtolower(date('F')); ?>/" title="<?php echo ucfirst(date('F')); ?>"><?php echo (date('F')); ?></a><br />

<a href="http://mydomain.com/<?php echo strtolower($month1); ?>/" title="<?php echo $month1; ?>"><?php echo $month1; ?></a><br />

...(2 through 10)...

<a href="http://mydomain.com/<?php echo strtolower($month11); ?>/" title="<?php echo $month11; ?>"><?php echo $month11; ?></a><br />
War es hilfreich?

Lösung

<?php

$current_month = date('n');
$MONTHS = array();
for ($m=0; $m<12; $m++) {
  $display_month = $m + $current_month;
  $MONTHS[] = date('F',mktime(1,1,1,$display_month,1,date("Y")));
}
foreach ($MONTHS as $month) {
  echo "
    <a
      href=\"http://mydomain.com/".strtolower($month)."\"
      title=\"$month\">$month</a><br />";
}
?>

Andere Tipps

Sie können schauen Sie in mit strtotime () statt mktime . Da in strtotime () tun können,

strtotime("-1 day", time());

Am 1. einigen Monaten, und es wird genau einen Tag zurück. Auch in Schaltjahren zählen.

Mit 1 statt date ( 'd') in Ihrem Code; jedoch jedes Mal, wenn Sie duplizierten Code zu sehen, wo nur eine Zahl ändert, sollten Sie über Schleifen denken:

<?php
for ($i = 0; $i < 12; $i++) {
    $month = date('F', mktime(0, 0, 0, date('m') + $i, 1, date('Y')));
?>

    <a href="http://mydomain.com/<?php echo strtolower($month); ?>" title="<?php echo $month; ?>"><?php echo $month; ?></a><br />

<?php
}
?>

Ich habe keine Ahnung, ob das Ihr Problem löst, wie ich bin nicht wirklich sicher ich verstanden, was das Problem war, aber ich habe eine Idee, wie Sie diesen Code ein bisschen besser lesbar machen könnten:

<?php 
    $month1 = date('F', strtotime("+1 month"));
    $month2 = date('F', strtotime("+2 month"));
    $month3 = date('F', strtotime("+3 month"));
    $month4 = date('F', strtotime("+4 month"));
    $month5 = date('F', strtotime("+5 month"));
    $month6 = date('F', strtotime("+6 month"));
    $month7 = date('F', strtotime("+7 month"));
    $month8 = date('F', strtotime("+8 month"));
    $month9 = date('F', strtotime("+9 month"));
    $month10 = date('F', strtotime("+10 month"));
    $month11 = date('F', strtotime("+11 month"));
?>

(aber ich stimme auch mit Chad Birch Anmerkung über Loops, anstatt den Code des Wiederholens)

<?php
    foreach(range(0,11) as $key){
        $months[$key]=date('F', strtotime("+{$key} month"));
    }
/* ... */
    foreach($months as $month){
        print "<a href='http://mydomain.com/".strtolower($month).
            "' title='".$month."'>".$month."</a><br />";
    }
?>

Die Sanitäter, das ist einige hässliche Code. Sie sollten schauen Sie in Loops (for / while / etc) wirklich und Arrays .

Der Code, den Sie dort haben könnten dies reduziert werden:

Edited . mein Code hatte das gleiche Problem wie das Original, festen scronide-Lösung unter Verwendung von, vielen Dank für den Hinweis it out

<?php
for ($i = 0; $i < 12; $i++)
{
    $months[$i] = date('F', mktime(0, 0, 0, date('m') + $i, 1, date('Y')));
}

for ($i = 0; $i < 12; $i++)
{
    print '<a href="http://mydomain.com/'.strtolower($months[$i]).'/" title="'.$months[$i].'">'.$months[$i]."</a><br />\n";
}
?>

Oder wenn Sie nichts dagegen haben die beiden Funktionen kombiniert (die Monatsnamen bekommen, und das Drucken der Links) zusammen, und Sie brauchen nicht die Monatsnamen für alles gespeichert sonst:

<?php
for ($i = 0; $i < 12; $i++)
{
    $month = date('F', mktime(0, 0, 0, date('m') + $i, 1, date('Y')));
    print '<a href="http://mydomain.com/'.strtolower($month)."/\" title=\"$month\">$month</a><br />\n";
}
?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top