「前回チケット発行日時」を現在日時で更新しているために発生している問題のようですね。
「次チケット発行日時 - チケット発行間隔」で更新すればいいのかなと。
「前回チケット発行日時」の意味が
「最後にチャージされた日時」に変わってくれるとロスが発生しない感じに('∇')
(詳細は長くなるので折りたたみ)
経過時間 = 現在日時 - 前回チケット発行日時
次チケット発行日時 = 現在日時 + 発行間隔 - (経過時間 mod 発行間隔)
したがって、
前回チケット発行日時 は 現在日時 - (経過時間 mod 発行間隔) で更新
チケットストック数 は チケットストック数 + (経過時間 div 発行間隔) で更新
【但し、チケットストック数はストック上限まで】
というように処理すればOKですね。
※ div は剰余切り捨ての除算、mod は剰余演算
--
検算も付けておきます。
発行間隔 20
前回発行日時 1
現在日時 19
経過時間 18 = 19 - 1
次発行日時 21 = 19 + 20 - (18 mod 20)
前回発行日時(更新) 1 = 19 - (18 mod 20)
前回発行日時 3
現在日時 79
経過時間 76 = 79 - 3
次発行日時 83 = 79 + 20 - (76 mod 20)
前回発行日時(更新) 63 = 79 - (76 mod 20)
ロスが発生するのがあるべき仕様、ということなのかもですが…('~')