どのように私はこのPHPコードとなる月のエラーの最後の日を修正するのでしょうか?

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

  •  11-09-2019
  •  | 
  •  

質問

以下のコードは、私が月の変化にリンクリストの先頭に現在の月のページへのリンクを動かすウェブサイトのメニューのために使用していますものです。

しかし、これは、4月のように、いくつかのヶ月、31日に失敗しました。私は、リンクのほとんどの同じ月に2つのリンクを取得します。私は、PHPの日付を生成方法で問題を読みましたが、このコードを変更する方法を見つけ出すことはできません。

誰でもPHPの博士さんはそれで刺しを取るしたいですか?おかげ

<?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 />
役に立ちましたか?

解決

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

他のヒント

あなたはのstrtotime()を使用してに見ての代わりにはmktimeのことができます。 strtotimeで以来()行うことができますする

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

いくつかの月の1日に、それは正確に1日戻ります。でも、うるう年に数えます。

を使用する代わりに、1日(「D」)あなたのコードでは、しかし、あなただけの数の変化重複コードを参照してくださいいつでも、あなたはループを考えるべきである。

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

私は問題が何であったか理解し、本当にわからないんだけど、これは、あなたの問題を解決するかどうか、私にはわかりませんが、私はあなたがこのコードをもう少し読みを作ることができる方法についてのアイデアを持っています:

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

(しかし、私はまた、ループを使用しての代わりに、コードを繰り返す程度チャドバーチのノートに同意する)

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

まあ、それはいくつかの醜いコードです。あなたは本当に(の/ etc /しばらくの間)にループになっているはずですし、 配列するます。

あなたが持っているコードは、これにそこに減らすことができます:

編集の私のコードは、それを指摘して感謝をscronideのソリューションを使用して固定し、元と同じ問題を、持っていた。

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

それとも、2つの機能を組み合わせる(月の名前を取得し、リンクを印刷する)気にしない、とあなたは何か他のもののために保存された月の名前を必要としない場合:

<?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";
}
?>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top