테스트 사이트 - 개발 중인 베타 버전입니다

날짜형식을 for 문으로 자동화 채택완료

수난이대 1년 전 조회 2,172

 

지금 5월이니 3월부터 총 3개의 날짜를 아래와 같이 출력하고싶습니다.

202403

202404

202405

 

 

6월이 되면 

 

202403

202404

202405

202406

 

즉 202403~ 현재년월까지 늘어나는 구조입니다.

어떤형태로 표현해야한는지요?

 

예시)

 

for( $i=202403; $i<=현재년월; $i++ ){

 

 echo $i;

}

 

댓글을 작성하려면 로그인이 필요합니다.

답변 5개

채택된 답변
+20 포인트
e
1년 전

</p>

<p>$year = '2024';</p>

<p>$month = '03';</p>

<p>do {</p>

<p>    echo $year.$month.'
';</p>

<p>    $month++;</p>

<p>    if($month < 10) $month = '0'.$month;</p>

<p>    if($month == 13) {</p>

<p>        $year++;</p>

<p>        $month = '01';</p>

<p>    }</p>

<p>} while($year.$month <= date('Ym'));</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

수난이대
1년 전
답변 감사합니다.
심플하면서 깔끔한 코드네요.

역시 이런 로직이 들어가야하는군요..

댓글을 작성하려면 로그인이 필요합니다.

toqurk
1년 전

저 방식대로 라면..만약 2025년01월일때...

for($i=202403; $i < date("Ym"); $i++ )

이 되면..
for($i=202403; $i < 202501; $i++ )

이 되어..

202403, 202404, 202405, 202406, 202407, 202408, 202409, 202410, 202411, 202412, 202413, 202414....

202499, 202501 

형식으로 표현 될겁니다.

년도의 기준을 따로 설정하시고 월로만 체크 하시는게 나으실것 같네요.

 

for($d=03; $d < date("m"); $d++ )

echo date("Y").$d; 형식으로

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

수난이대
1년 전
답변 감사합니다.

저도 같은 문제점을 인지하고 있었습니다.
그래서 고민였는데..

eyekiss 님과 베르만님이 정확히 질문을 파악해 주시고
해결안을 주셨습니다.

toqurk님 방법도 우회해서 해결하는 또하나의 해결안 같습니다.
감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

1년 전

</p>

<p><?php</p>

<p>// echo date('Y-m-d'); // 2024-05-28</p>

<p>

function get_month_range($now, $gap = '') {

    $ts = strtotime($now);

    if ($ts === false) {

        $ts = $now;

    }</p>

<p>    if (empty($gap) == true) {

        $gap = '+0';

    }

    

    $finish_v = (int)date('Ym', $ts);

    $start_v = (int)date('Ym', strtotime($gap . ' month', $ts));</p>

<p>    $start = min($start_v, $finish_v);

    $finish = max($start_v, $finish_v);

    

    

    $dateset = [$start];

    while (current($dateset) < $finish) {

        $el = date('Ym', strtotime(current($dateset) . '01 +1 month'));

        $dateset[] = $el;

        next($dateset);

    }

    

    return $dateset;

}</p>

<p> </p>

<p>/*

// 202405

$dateset = get_month_range(time());

foreach ($dateset as $v) {

    echo $v . PHP_EOL;

}</p>

<p> </p>

<p>// 202403

// 202404

// 202405

$dateset = get_month_range(time(), '-2');

foreach ($dateset as $v) {

    echo $v . PHP_EOL;

}</p>

<p> </p>

<p>// 202405

// 202406

// 202407

$dateset = get_month_range(time(), '+2');

foreach ($dateset as $v) {

    echo $v . PHP_EOL;

}</p>

<p> </p>

<p>// 202309

// 202310

// 202311

// 202312

// 202401

// 202402

$dateset = get_month_range('20240213', '-5');

foreach ($dateset as $v) {

    echo $v . PHP_EOL;

}</p>

<p> </p>

<p>// 202403

// 202404

// 202405

// 202406

// 202407

// 202408

// 202409

// 202410

// 202411

// 202412

// 202501

// 202502

// 202503

// 202504

$diff_obj = date_diff(date_create('20240301'), date_create('20250401'));

$diff_month = 12 * $diff_obj->y + $diff_obj->m;

$dateset = get_month_range('20240301', '+' . $diff_month);

foreach ($dateset as $v) {

    echo $v . PHP_EOL;

}

*/</p>

<p> </p>

<p>// 202403

// 202404

// 202405

$diff_obj = date_diff(date_create('20240301'), date_create());

$diff_month = 12 * $diff_obj->y + $diff_obj->m;

$dateset = get_month_range('20240301', '+' . $diff_month);

foreach ($dateset as $v) {

    echo $v . PHP_EOL;

}</p>

<p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

수난이대
1년 전
와 손수 코딩까지.. 생각보다 고려해야 할 부분이 많네요.
답변 감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

1년 전

for ($i = 202403; $i <= date('Ym'); $i++) { 

 echo $i;

}

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

수난이대
1년 전
답변 감사합니다.

무조건 순차적으로 증감하는 형식은 아닌거 같습니다.

2025년이 되었을경우,

2024년 13월 ,14월... 즉 202413, 202414... 이런식으로 표기될거예요..

댓글을 작성하려면 로그인이 필요합니다.

cuwaaang
1년 전

date('Ymd')?

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

수난이대
1년 전
답변 감사합니다.

해당 함수로는 구현이 힘들어보입니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인