개발 Q&A

제목 월마다 한개의 날짜를 생성할려고 하는데 날짜 생성시 간혹 년과 월이 바뀌는 문제때문에 글을 올렸습니다.
카테고리 PHP
글쓴이 정수리 작성시각 2016/11/21 15:32:12
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 16043   RSS

1월~12월까지 각월마다 랜덤으로 특정 날짜를 생성할려고 합니다.

 

<?php
for($i=1; $i<=12; $i++){//반복문을 통해 1~12까지 반복문을 돌립니다.
  echo create_date($i).'';
  }
 
function create_date($i){//날짜 생성 함수
  $date;
  if($i%2==1){//해당 마지막일이 31일인 월의 경우 0과 32사이 날짜가 생성되도록
  $date = date('Y-m-d', mktime(0, 0, 0, $i, mt_rand(0,32), date('Y')));
    }elseif($i==8){//8월의 경우 마지막날이 31일이기에 따로 조건문으로 생성
 
        $date = date('Y-m-d', mktime(0, 0, 0, $i, mt_rand(0,32), date('Y')));
    }elseif($i==2){//2월의 경우 마지막날이 28이기에 
        $date = date('Y-m-d', mktime(0, 0, 0, $i, mt_rand(0,28), date('Y')));
    }else{//나머지 마지막날이 30일인 월의 날짜 생성
      $date = date('Y-m-d', mktime(0, 0, 0, $i, mt_rand(0,31), date('Y')));
    }
    return $date;
}
?>

각월마다 랜덤으로 날짜는 잘 생성되는데 확인차 계속 새로고침을 하면 간혹 월마다 년도와 월이 변경되어 출력이 되네요

ex) 

2016-01 

2016-02

2016-03 

2016-04

2016-05

2016-06

 2016-07

 2016-08

 2016-09

 2016-10

 2016-11

 2016-12 

이렇게 출력이 되어야 하는데 1월달의  2016-01로 표시되어야하는 부분에서는 간혹 2016-02  또는  2015-01 표시가 됩니다.

코드의 어느부분을 수정해야 될까요?

 다음글 구글 차트 질문있습니다 ㅠㅠ (1)
 이전글 설계 및 개발중에서 나타나는 문서화의 문제점에 대한 질... (3)

댓글

배강민 / 2016/11/21 15:41:17 / 추천 0

https://secure.php.net/manual/kr/function.mt-rand.php

mt_rand(0, 32)면 1~31이 아니라 0~32 안에서 하나를 집어냅니다.

즉, 0, 32도 나올 수 있습니다.

1월 0일이 존재하나요? 3월 32일이 존재하나요?

1월 0일이면 작년 12월 31일이 되고, 3월 32일이면 4월 1일이 됩니다.

정수리 / 2016/11/21 15:43:53 / 추천 0

@배강민

아 그렇군요

제가 메뉴얼을 보긴하였데 잘못이해 했나보네요

변경해서 확인해보니 아주잘되네요 ^^감사합니다.

배강민 / 2016/11/21 15:56:57 / 추천 0

다음부터는 본인이 만들어낸 값 mt_rand(0,32) 등을 옆에 같이 찍어서 디버깅해보세요.

만약, 그리만 하셨어도, 질문을 위한 접속, 로그인, 질문내용작성의 시간을 버실 수 있으셨을 겁니다.

Dexter / 2016/11/22 03:17:41 / 추천 0
<?php
function create_date($month='',$year='')
{
    $day = mt_rand(1, date('t', mktime(0, 0, 0, $month, 1, $year)));
    return implode('-', [$year, $month, $day]);
}

for($i=1; $i<=12; $i++)
{
    echo create_date($i, date('Y')).'<br>';
}
?>

야밤에 심심해서... 테스트 안해봐서 잘 될지는 모르겠네요.