날짜형식을 for 문으로 자동화

날짜형식을 for 문으로 자동화

QA

날짜형식을 for 문으로 자동화

본문

 

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

202403

202404

202405

 

 

6월이 되면 

 

202403

202404

202405

202406

 

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

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

 

예시)

 

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

 

 echo $i;

}

 

이 질문에 댓글 쓰기 :

답변 5


$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'));

date('Ymd')?


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

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

저 방식대로 라면..만약 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; 형식으로

답변 감사합니다.

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

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

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

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT