2016-11-16 10 views
0

私は毎月顧客に請求する必要のあるシステムに取り組んでいます。日付は、購読する日によって異なります。月または月の最終日になる可能性があります。特定の日付に毎月顧客に請求する

私は最初の日付を保存しています。たとえば、顧客が今日申し込んだ場合、2016-11-30に課金されるため、2016-11-30をデータベースに保存します。

日付が固定値の場合(問題はありません)は問題ありません。問題はその月の最後の日である。上記の例を考えてみると、2016-12-30ではなく2016-12-31に請求する必要があります(31日は12月の最終日です)。

月の最後の日に請求する必要があるすべての顧客を取得するためにPHPスクリプトを作成するにはどうすればよいですか?

ありがとうございます!

EDIT

例:

顧客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' 
関連する問題