2016-11-16 2 views
0

나는 매월 고객에게 요금을 부과해야하는 시스템에서 일하고 있습니다. 날짜는 구독하는 날짜에 따라 달라질 수 있습니다. 매달 1 일 또는 그 달의 마지막 날에있을 수 있습니다.특정 날짜에 고객에게 월 단위로 요금 청구

첫 데이트를 저장하고 있습니다. 예를 들어, 고객이 오늘 구독하는 경우 2016-11-30에 요금이 부과되므로 2016-11-30을 데이터베이스에 저장합니다.

날짜가 고정 값일 때 (1이라고 가정 해 봅시다) 문제가되지 않습니다. 문제는 그 달의 마지막 날이 언제 올 것인가입니다. 위의 예를 고려하면 2016-12-30 대신에 2016-12-31에 청구해야합니다 (31 일이 12 월 마지막 날이기 때문에).

달의 마지막 날에 요금을 청구해야하는 모든 고객을 확보하려면 어떻게해야합니까?

미리 감사드립니다.

편집

예 :

고객 A는 표지판을 오늘. 시스템은이 고객이 매월 마지막 날에 매월 요금을 청구해야한다고 말합니다. 고객 테이블에는 첫 번째 날짜가있는 필드가 있으며이 경우 2016-11-30을 저장합니다. 즉, 30-NOV, 31-DEC, 31-JAN, 28-FEB (또는 29-FEB), 31-MAR, 30-APR에 청구될 것입니다.

내일 고객 B 표지판. 시스템은이 고객이 매월 1 일에 매월 요금을 청구해야한다고 말합니다. 데이터베이스 필드는 2016-12-01을 저장합니다. 이는 그가 1-DEC, 1-JAN, 1-FEB, 1-MAR, 1-APR에 대해 요금이 부과되고 계속 진행됨을 의미합니다.

이제 고객에게 청구 할시기를 결정하는 스크립트를 작성해야합니다. 고객 B는 매월 1 일에 설치되므로 문제가되지 않습니다. 그러나 고객 A는 해당 월의 같은 날에 청구되지 않습니다. 몇 달 동안 그는 30 일에, 31 일에, 2 월 28 일/29 일에 청구될 것입니다.

실제로 2016-11-30은 문자 그대로 2016-11-30이 아니라 "월말"을 의미한다는 것을 스크립트에서 어떻게 알 수 있습니까? 그냥 원하는대로와 형식 매개 변수를 수정

<?php echo date('d-m-Y', strtotime('last day of this month')); ?> 

:

+0

당신은'31-DEC'에서 나를 위탁하겠다고 제안 하겠지만,'30-DEC'에 가입하면'30-NOV'가 부과 될 것입니다, 맞습니까? 그렇다면 여기에 비대칭 성이있는 것 같습니다. –

+0

일을 단순하게하기 위해 시스템이 그 달의 마지막 날에만 요금을 부과한다고 가정 해 봅시다. 오늘 가입하는 경우 30-NOV, 31-DEC, 31-JAN, 28-FEB (또는 29-FEB), 31-MAR, 30-APR –

답변

0

당신은 뭔가를 시도 할 수 있습니다. 지난 달과 다음 달과 같은 항목도 사용할 수 있습니다.

+0

음,이 경우 어떻게 사용할 수 있습니까? ? 문제는 다음과 같습니다. 1 일에 청구될 것으로 예상되는 고객과 해당 월의 마지막 날에 청구될 것으로 예상되는 고객이 있습니다.나는 데이터베이스에 첫 번째 날짜를 저장하고 있지만 저장된 날짜가 그 달의 마지막 날이라는 것을 "감지"할 수 있습니다. 그래서 "이 고객은 당월 마지막 날에 요금을 청구해야합니다"라고 말할 수 있습니다. ? –

+0

날짜 만 수신하도록 날짜 매개 변수를 수정할 수 있습니다. 따라서 'd'만 사용하면됩니다. 당신은 달에 따라 30 또는 31을 얻습니다. – RFLdev

+0

죄송 합니다만, 아마도 명확하지 않았습니다. 문제는 날짜를 저장하는 것이 아닙니다. 그 날짜는 이미 계산되어 저장되어 있습니다. 문제는 고객이 매월 말일에 요금을 청구해야한다는 것을 어떻게 알 수 있습니까? –

0

MySQL은 전달 된 날짜의 월의 마지막 날을 반환하는 LAST_DAY 기능이

예 :. 나는 30 NOV``에 가입 한 경우

mysql> SELECT LAST_DAY('2003-02-05'); 
    -> '2003-02-28' 
관련 문제