이 PHP 코드로 발생하는 달의 마지막 날 오류를 어떻게 수정합니까?

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

  •  11-09-2019
  •  | 
  •  

문제

아래 코드는 현재 월 페이지의 링크를 월 변경시 링크 목록의 맨 위로 이동하는 웹 사이트 메뉴에 사용하는 것입니다.

그러나 이것은 4 월과 같이 몇 개월 중 31 일에 실패합니다. 대부분의 링크에 대해 같은 달에 두 개의 링크를 얻습니다. PHP가 날짜를 생성하는 방식에 대한 문제를 읽었지만이 코드를 변경하는 방법을 알 수는 없습니다.

PHP Ph.D가 찌르고 싶은 사람이 있습니까? 감사

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

한 달의 첫째, 그것은 정확히 하루로 돌아갑니다. 도약 시절에도.

코드에서 날짜 대신 ( 'd') 대신 1을 사용하십시오. 그러나 숫자가 변경되는 중복 코드가 표시되면 루프에 대해 생각해야합니다.

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

(그러나 나는 또한 코드를 반복하는 대신 루프 사용에 대한 Chad Birch의 메모에 동의합니다)

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

오, 이런, 그것은 못생긴 코드입니다. 당신은 정말로 조사해야합니다 루프 (/while/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";
}
?>

또는 두 기능을 결합하고 (달 이름을 얻고, 링크를 인쇄 함) 다른 것에 저장된 달 이름이 필요하지 않은 경우 :

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