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

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

202403

202404

202405

6월이 되면 

202403

202404

202405

202406

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

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

예시)

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

 echo $i;

}

답변 5개

채택된 답변
+20 포인트
Copy
$year = '2024';

$month = '03';

do {

    echo $year.$month.'<br>';

    $month++;

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

    if($month == 13) {

        $year++;

        $month = '01';

    }

} while($year.$month <= date('Ym'));
로그인 후 평가할 수 있습니다

답변에 대한 댓글 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개

답변 감사합니다.

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

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

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

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

Copy
<?php

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


function get_month_range($now, $gap = '') {
    $ts = strtotime($now);
    if ($ts === false) {
        $ts = $now;
    }

    if (empty($gap) == true) {
        $gap = '+0';
    }
    
    $finish_v = (int)date('Ym', $ts);
    $start_v = (int)date('Ym', strtotime($gap . ' month', $ts));

    $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;
}

 

/*
// 202405
$dateset = get_month_range(time());
foreach ($dateset as $v) {
    echo $v . PHP_EOL;
}

 

// 202403
// 202404
// 202405
$dateset = get_month_range(time(), '-2');
foreach ($dateset as $v) {
    echo $v . PHP_EOL;
}

 

// 202405
// 202406
// 202407
$dateset = get_month_range(time(), '+2');
foreach ($dateset as $v) {
    echo $v . PHP_EOL;
}

 

// 202309
// 202310
// 202311
// 202312
// 202401
// 202402
$dateset = get_month_range('20240213', '-5');
foreach ($dateset as $v) {
    echo $v . PHP_EOL;
}

 

// 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;
}
*/

 

// 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;
}
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

Copy
for ($i = 202403; $i <= date('Ym'); $i++) { 
 echo $i;
}
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

답변 감사합니다.

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

2025년이 되었을경우,

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

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

date('Ymd')?

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

답변에 대한 댓글 1개

답변 감사합니다.

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

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

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

로그인
🐛 버그신고