2019-11-15
2019-11-16
2019-11-17
2019-11-18
2019-11-19
2019-11-20
이렇게 나와야하는데 뭐가 문제인지 잘모르겠습니다..
<?php
$start_day = date('Y-m-d');
$end_day = date('2019-11-20');
for ($i = strtotime($start_day); $i <= strtotime($end_day); $i++) {
$start_day = date('Y-m-d', strtotime('+1 day', strtotime($start_day)));
echo $start_day."<br>";
}
|
답변 3개 / 댓글 3개
채택된 답변
+20 포인트
문제의 원인을 남겼는데 피드백 없이, 이곳에만 댓글을….
DateTime Class로 해결은 되었습니까?
'문자'로 돌려도 날짜 문자열을 인식해 정상적인 결과를 얻어내니 나쁜 방법은 아닙니다.
참고로 추가.
- 지정한 날짜까지 남은 경우, 당일, 지난 경우에 대한 처리
- strtotime(), date() 함수를 조금이라도 줄이면 빨라집니다.
strtotime('+1 day', strtotime($start_day)) → strtotime($start_day.' +1 day')
기타 생략
답변에 대한 댓글 2개
혼자 결론내렸단 내용에도 문제가 있어 참고로 댓글 추가합니다.
문제의 원인은 이미 스쿨에 댓글로 남겼는데 제대로 읽지 않은 것 같군요.
"문제. timestamp를 구해서 1씩 증가니까 엄청나게 반복하겠지요."
timestamp는 1970년 1월 1일부터 지금까지 지나온 초를 나타낸 수입니다.
strtotime('2019-11-15')의 결과는 1573743600(int) 입니다. date 형식이 아닙니다.
[code]
for ($i = strtotime($start_day); $i <= strtotime($end_day); $i++) { // $start_day = '2019-11-15' 기준
}
// 실제로 처리되는 값은 아래와 같죠. 결국 432,000번을 반복하게 됩니다.
for ($i=1573743600; $i<=1574175600; $i++) {
}
[/code]
다른 내용은 생략합니다.
문제의 원인은 이미 스쿨에 댓글로 남겼는데 제대로 읽지 않은 것 같군요.
"문제. timestamp를 구해서 1씩 증가니까 엄청나게 반복하겠지요."
timestamp는 1970년 1월 1일부터 지금까지 지나온 초를 나타낸 수입니다.
strtotime('2019-11-15')의 결과는 1573743600(int) 입니다. date 형식이 아닙니다.
[code]
for ($i = strtotime($start_day); $i <= strtotime($end_day); $i++) { // $start_day = '2019-11-15' 기준
}
// 실제로 처리되는 값은 아래와 같죠. 결국 432,000번을 반복하게 됩니다.
for ($i=1573743600; $i<=1574175600; $i++) {
}
[/code]
다른 내용은 생략합니다.
Copy
<?php
$start_day = date('Y-m-d');
$end_day = date('2019-11-20');
for ($i = 0; $start_day <= $end_day ; $i++) {
echo $start_day."<br>";
$start_day = date('Y-m-d', strtotime('+1 day', strtotime($start_day)));
}
답변을 작성하려면 로그인이 필요합니다.
사실 오기가 생겨서 혼자 밤새도록 누가이기나 될때까지 해봤네요..
피드백 드리지 못해 죄송합니다. 결국 답을 찾았지만요.
for ($i = 0; strtotime($start_day) <= strtotime($end_day) $i++) {
echo $start_day;
$start_day = date('Y-m-d', strtotime($start_day. '+1 day'));
}
기존 소스에서
for의 조건문 ( $i <= strtotime($end_day) ) 에서 문제가 발생하였던것 같습니다.
기존 $i 에서
strtotime($start_day) <= strtotime($end_day) 로 변경하였더니 잘 되는 부분을 확인하였습니다.
정확한 이유는 잘 모르겠지만 혼자 결론 내린내용은
$i의 타입은 int
strtotime($end_day)의 타입은 date형식이라 조건에서 계산이 안된것같습니다.
감사합니다.