함수들이 계산을 할때 한달은 30일 혹은 31일 기준이다.
해서 매월 일수가 다른 경우 날짜가 다르게 나타나거나 월이 한번 더 넘어가기도 한다.
예를 들어 5월 31일부터 한달 후 라고 하면 6월 30일이 아니라 7월 1일이 나온다.
예약을 3개월단위로 끊어서 받는 경우 지금이 5월이면 7월 까지만 예약이 가능해야 하는데, 8월이 열리는 경우가 있다는 것이다.
이 현상은 버그라고 세계 수많은 개발자가 항의하지만, 정작 당사자들은 버그가 아니니 우회법을 개발해 사용하라고 공식 답변했다.
근데 우회법은 공식적으로 내놓지 않았다는게 문제.
정상적인 함수로는 이 동작에 오류가 존재하기에 함수로 만들었다.
function getDateTime($now, $term=1) {
$time = strtotime(($term>0?"+":"").$term." month", strtotime(date("Y-m",strtotime($now))." -01 "));
$l = date('t', $time);
return date("Y-m-".$l, $time);
}
원리는 간단하다.
월과 일을 나눠서 월단위로 계산을 한 후 일단위를 대입한다.
일 단위는 그달의 마지막 일자를 구해서 붙인다.
아래처럼 출력해서 테스트를 했다.
출력 예 :
foreach(array('2015-10-31','2015-11-30','2015-12-31','2016-01-31','2016-02-29','2016-03-31','2016-04-30','2016-05-31','2015-10-04','2015-11-18','2015-12-27') as $date ){
echo $date.' → '.getDateTime($date,3).'<br>';
}
결과물
2015-10-31 → 2016-01-31
2015-11-30 → 2016-02-29
2015-12-31 → 2016-03-31
2016-01-31 → 2016-04-30
2016-02-29 → 2016-05-31
2016-03-31 → 2016-06-30
2016-04-30 → 2016-07-31
2016-05-31 → 2016-08-31
2015-10-04 → 2016-01-31
2015-11-18 → 2016-02-29
2015-12-27 → 2016-03-31
출처 : 잠돌의 티스토리
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 530 |
|
19년 전 | 1251 | |
| 529 |
|
19년 전 | 1440 | |
| 528 |
|
19년 전 | 1990 | |
| 527 |
사랑과우정
|
19년 전 | 2404 | |
| 526 | 19년 전 | 2885 | ||
| 525 |
|
19년 전 | 2318 | |
| 524 |
|
19년 전 | 1821 | |
| 523 | 19년 전 | 7071 | ||
| 522 |
|
19년 전 | 3752 | |
| 521 | 19년 전 | 2366 | ||
| 520 | 19년 전 | 2416 | ||
| 519 | 19년 전 | 2923 | ||
| 518 |
|
19년 전 | 5819 | |
| 517 |
|
19년 전 | 5579 | |
| 516 |
|
19년 전 | 2284 | |
| 515 |
|
19년 전 | 3331 | |
| 514 | 19년 전 | 2885 | ||
| 513 | 19년 전 | 2244 | ||
| 512 |
개발자관리자
|
19년 전 | 2747 | |
| 511 |
개발자관리자
|
19년 전 | 1602 | |
| 510 |
개발자관리자
|
19년 전 | 1767 | |
| 509 |
개발자관리자
|
19년 전 | 1878 | |
| 508 |
개발자관리자
|
19년 전 | 2029 | |
| 507 |
개발자관리자
|
19년 전 | 1705 | |
| 506 |
개발자관리자
|
19년 전 | 1831 | |
| 505 |
개발자관리자
|
19년 전 | 1796 | |
| 504 |
개발자관리자
|
19년 전 | 1874 | |
| 503 |
개발자관리자
|
19년 전 | 1538 | |
| 502 |
개발자관리자
|
19년 전 | 2676 | |
| 501 | 19년 전 | 2025 | ||
| 500 | 19년 전 | 3259 | ||
| 499 | 19년 전 | 3285 | ||
| 498 | 19년 전 | 2543 | ||
| 497 | 19년 전 | 2616 | ||
| 496 | 19년 전 | 2468 | ||
| 495 | 19년 전 | 2713 | ||
| 494 | 19년 전 | 2697 | ||
| 493 | 19년 전 | 3207 | ||
| 492 | 19년 전 | 2920 | ||
| 491 | 19년 전 | 5343 | ||
| 490 |
|
19년 전 | 2142 | |
| 489 |
|
19년 전 | 2230 | |
| 488 |
|
19년 전 | 2034 | |
| 487 |
|
19년 전 | 1964 | |
| 486 |
|
19년 전 | 1965 | |
| 485 |
|
19년 전 | 2172 | |
| 484 |
|
19년 전 | 3240 | |
| 483 |
|
19년 전 | 3123 | |
| 482 |
|
19년 전 | 2877 | |
| 481 |
|
19년 전 | 2581 | |
| 480 |
|
19년 전 | 2654 | |
| 479 |
|
19년 전 | 2323 | |
| 478 |
|
19년 전 | 2351 | |
| 477 |
개발자관리자
|
19년 전 | 1614 | |
| 476 |
개발자관리자
|
19년 전 | 2328 | |
| 475 |
개발자관리자
|
19년 전 | 2680 | |
| 474 |
개발자관리자
|
19년 전 | 2680 | |
| 473 |
개발자관리자
|
19년 전 | 2996 | |
| 472 | 19년 전 | 2760 | ||
| 471 | 19년 전 | 1761 | ||
| 470 | 19년 전 | 1857 | ||
| 469 |
|
19년 전 | 2760 | |
| 468 |
|
19년 전 | 2251 | |
| 467 |
|
19년 전 | 4020 | |
| 466 |
|
19년 전 | 2537 | |
| 465 | 19년 전 | 2401 | ||
| 464 | 19년 전 | 3550 | ||
| 463 |
|
19년 전 | 3124 | |
| 462 |
|
19년 전 | 2267 | |
| 461 |
|
19년 전 | 3062 | |
| 460 |
|
19년 전 | 2272 | |
| 459 |
|
19년 전 | 3147 | |
| 458 |
|
19년 전 | 3561 | |
| 457 |
|
19년 전 | 5243 | |
| 456 |
|
19년 전 | 3167 | |
| 455 |
스마일미디어
|
19년 전 | 3154 | |
| 454 |
스마일미디어
|
19년 전 | 2748 | |
| 453 |
스마일미디어
|
19년 전 | 2487 | |
| 452 |
스마일미디어
|
19년 전 | 2743 | |
| 451 |
스마일미디어
|
19년 전 | 2463 | |
| 450 |
스마일미디어
|
19년 전 | 2591 | |
| 449 |
스마일미디어
|
19년 전 | 2384 | |
| 448 |
스마일미디어
|
19년 전 | 2707 | |
| 447 | 19년 전 | 2972 | ||
| 446 |
스마일미디어
|
19년 전 | 3257 | |
| 445 |
스마일미디어
|
19년 전 | 7062 | |
| 444 |
스마일미디어
|
19년 전 | 5177 | |
| 443 |
스마일미디어
|
19년 전 | 2447 | |
| 442 |
스마일미디어
|
19년 전 | 5190 | |
| 441 |
스마일미디어
|
19년 전 | 3122 | |
| 440 |
|
19년 전 | 2490 | |
| 439 | 19년 전 | 2182 | ||
| 438 | 19년 전 | 3582 | ||
| 437 |
|
19년 전 | 2879 | |
| 436 |
|
19년 전 | 3260 | |
| 435 |
|
19년 전 | 2905 | |
| 434 | 19년 전 | 3402 | ||
| 433 |
sjsjin
|
19년 전 | 2734 | |
| 432 |
sjsjin
|
19년 전 | 3473 | |
| 431 |
sjsjin
|
19년 전 | 2438 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기