Nasıl bu php kodu ile sonuçlanabilir ay hataların son günü giderirdi?

5 Cevap php

Aşağıdaki kod ben ayın değişikliği bağlantı listenin üst geçerli ayın sayfanın linki hareket bir web sitesi menü için kullanıyorum budur.

Ama bu gibi Nisan gibi bazı ay, 31 Mayıs'taki başarısız; Ben bağlantıların çoğu için aynı ayına iki bağlantılar olsun. Ben php tarihleri ​​üretir yolu ile sorunları ile okudum, ancak bu kodu değiştirmek için nasıl anlamaya olamaz.

Herkes Doktora 'ın ona bir bıçak almak istiyorum php? Teşekkürler

<?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 />

5 Cevap

<?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 />";
}
?>

Sen strtotime() yerine mktime kullanarak içine bakabilirsiniz. Strtotime bölgesinde () yapabilirsiniz Başlangıcı

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

Bazı ayın 1'inde ve bir gün tam olarak geri döner. Hatta artık yıllarda sayma.

Yerine kod tarih ('d') 1. kullanın; sadece bir sayı değişikliği nerede ancak, çoğaltılamaz kodu görmek her zaman, sen döngüler hakkında düşünmek gerekir:

<?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
}
?>

Ben sorunun ne olduğunu anladım gerçekten emin değilim, ama bu kod biraz daha okunabilir hale nasıl bir fikrim yok bu, sorunu çözer eğer hiçbir fikrim yok:

<?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"));
?>

(Ama ben de döngüler kullanarak yerine kodunu yinelemek hakkında Chad Birch notu katılıyorum)

<?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 />";
    }
?>

Ah sevgili, bazı çirkin kod. Gerçekten Loops (/ süre / vb) ve Arrays içine bakmak gerekir.

Orada var kodu bu azaltılmış olabilir:

Edited, my code had the same problem as the original, fixed using scronide's solution, thanks for pointing 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";
}
?>

Yoksa (ay adlarını almak ve bağlantıları baskı) birlikte ve başka bir şey için saklanan ay adlarını gerekmez iki fonksiyonu bir arada sakıncası yoksa:

<?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";
}
?>