実際のプログラミングのコーディングの仕方では無く、"考え方"で悩んでいます。
今、課金のシステムを作っているのですが、
「一か月」の一か月って、何日後?というのを悩んでいます。
例えば、4月29日の一か月後は5月29日だとしても、
4月30日(月末)の一か月後は、5月30日なのか5月31日(月末)なのかとか。。。
じゃあ逆に、5月31日に一か月契約した人は、
6月30日(月末)だとすると、5月30日に契約した人は、やっぱり6月30日?
とか。。。
当然、30日後、31日後と固定してしまうと、
更新されるごとにどんどんとずれて行ってしまいます。
こういうのって、普通どうするものでしょう?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答6件
0
まあ、基本的には「どう決めるか次第」ではあるのですが、「○ヶ月」のような単位で決めて、それ以上に特段定めのない場合は民法143条2項に従って、対応する日の前日(なければ月末)が最終日となります。
個人的な話なのですが、「1ヶ月と1日前」に発売になる、5月1日発の夜行バスのチケットを3月31日に取りに行ったら、既に売り切れていた、ということがありました。詳しく調べてみると、「乗車日の前日の1か月前」として計算するので、5月1日発なら4月30日の1か月前、3月30日発売でした。
投稿2015/09/30 01:05
編集2015/09/30 01:12総合スコア146544
0
ベストアンサー
こんにちは。
「一ヶ月」と「任意の起点」を使うという前提に立てば、
○月1日(起点)→[1ヵ月後]翌1日→[1ヵ月後]翌1日
○月31日(起点)→[1ヵ月後]翌30日→[1ヵ月後]31日
のように、日の部分を使って翌月に存在しなければ、存在するまで遡る(9月31日が無いので9月30日とする等)
課金ではないですが、私が過去に経験した月の加減算は上の規則で求めていました。
ただ、これはサービス(課金が発生する)の性格によるのではないかと思います。
サービスの利用を開始してから停止(退会?)するまで、毎月継続的に発生するなら
上記のように任意の起点日で考えていく事もできますし、
「月末」という考え方が生まれるのは「月利用」を前提として。つまり、サービスの利用開始日が1日であろうが30日であろうが、1日から月末までの料金を「月末に課金する(翌月分とかになりそうですが)」になるように思えます。(「不公平感が発生するので日割りする」かどうかは別の問題として)
そうではなく、利用者が必要なときに一定期間サービスを利用する(継続的でない)という性格のものであれば、計算方法として気にされているような日数の違い(不公平感?)が発生するので、例えば「サービス利用開始日から30日間」という考え方もできると思います。
投稿2015/09/30 01:07
編集2015/09/30 01:15総合スコア294
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
もし会社で作られているなら、「仕様を決める人間」にその特殊なケースをしっかり伝えて決済期間を決めてもらうのがベストと思います。
銀行や保険のようなお堅いシステムはわかりませんが、よくあるWebサービスは以下な感じとおもいます。1カ月契約の例で。
■日割り
・基本は毎月5日から翌月5日まで、みたいな感じで確実に存在する日付で決済期間を決める。(だから月によって日数が変わる)
・中途半端な日に契約開始した人は、その月だけは日割り計算してあげる。
(3月20日に契約した人は、4月5日までの15日間分だけの料金を請求する)
■月ぎめ
・基本は毎月5日から翌月5日まで、みたいな感じで存在する日付で期間を決める。
・半端な日で契約開始した人も、日割り計算せずにその月は全額払ってもらう。
答えになってるかな。。
投稿2015/09/30 01:08
総合スコア87
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
考え方としては、1ヶ月=30日計算 を採用しているところがおおいです。
その場合勿論月末月初という考え方ではないのでずれていきます。
毎月いくらというような決め方をする場合、一般的には1日から末日までを1ヶ月とします。
開始日が中日であれば初月は日割りみたいな計算をして次の月から1日から末日で1ヶ月となるよう調整します。
1日単位の課金時間貸しの場合は日数計算、月額契約みたいな場合は初月は日割り、次月から1日か末日の月額単位が楽かとおもわれます。
まとはずれだったらもうしわけないです。
投稿2015/09/30 06:07
総合スコア119
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
4月30日(月末)の一か月後は、5月31日(月末)だと思います。
「一番最初の契約日が月末かどうか」がポイントになってくるんじゃないでしょうか。
最初が5月31日(月末)なら、今後も30日(月末)と31日(月末)を一ヶ月後とし、
最初が5月30日なら、すべて30日を一ヶ月後とする。
「月末とそれ以外」で計算式が変わってくる感じで。
(2月除いてます)
「課金」の定義によっても変わってくるとは思いますが…。
最初の課金日から1ヶ月おきに更新がある、ということのようなので、上記の考え方でやると思います。
投稿2015/09/30 00:51
総合スコア79
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「何日」で決まらない→日付管理概念を拡張する必要がある、
何月何日というだけのデータでなく、月末というフラグを持つようにし、
その日付は、翌月1日の前日を求める、というルールを決めるだけなのでは?
そこに、土日祝日を含めないのであれば、その分さらに前日に繰り延べるルールにするとか。
phpの場合、月末日を求めるには、
mktime(0, 0, 0, 10, 0 2015)
とすることで2015/10/0つまり2015/9/30のタイムスタンプが取得できます。
投稿2015/09/30 03:42
編集2015/09/30 03:47
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/30 01:34
2015/10/01 22:38