php 寻找相同日期,產生相同的日期作爲結帳日期PHP

这篇博客讨论了一个PHP代码示例,该示例用于计算从非月初开始的合同日期,并均匀分配价值。当合同起始于2016年1月15日时,如何正确计算第一个月的剩余天数并确保后续月份的平均值不变。作者遇到了问题,当前的实现导致总价值超出合同金额。解决方案建议在循环中动态计算$no_of_days,并将计算过程分解为更简单的功能。
摘要由CSDN通过智能技术生成

$contract_start_date = strtotime('2016-01-01');

$contract_end_date = strtotime('2016-12-01');

$contract_start_date_last_date = date('t', $contract_start_date);

echo "contract last date of any start month: ".$contract_start_date_last_date."
";

$contract_end_date_last_date = date('t', $contract_end_date);

echo "contract last date of any end month: ".$contract_end_date_last_date."
";

$no_of_months = 1 + (date("Y", $contract_end_date) - date("Y", $contract_start_date)) * 12;

$no_of_months += date("m", $contract_end_date) - date("m", $contract_start_date);

$no_of_days = $contract_start_date_last_date - date("d", $contract_start_date);

echo $no_of_days."
";

echo $no_of_months."
";

$total_contract_value = 1000;

$no_of_bookings = 1;

$no_of_records = ($no_of_months/$no_of_bookings);

echo $no_of_records."
";

$contract_value = ($total_contract_value/$no_of_records);

echo $contract_value."
";

$initial_contract_value_for_first_month = ($contract_value/$no_of_days);

echo $initial_contract_value_for_first_month."
";

for($i = 0; $i < $no_of_records; $i++){

$proceed = false;

$calculated_records = intval($i * $no_of_bookings);

echo $calculated_records."
";

$contract_date = strtotime("+".$calculated_records." months", $contract_start_date);

echo date('Y-m-d', $contract_date)."&nbsp&nbsp&nbsp&nbsp&nbsp".$contract_value."
";

}

2016-01-01 83.333333333333

2016-02-01 83.333333333333

2016-03-01 83.333333333333

2016-04-01 83.333333333333

2016-05-01 83.333333333333

2016-06-01 83.333333333333

2016-07-01 83.333333333333

2016-08-01 83.333333333333

2016-09-01 83.333333333333

2016-10-01 83.333333333333

2016-11-01 83.333333333333

2016-12-01 83.333333333333

現在,我要的是如果合同起始日期是不是在第一次的任何一個月的開始,那麼我來計算同月的剩餘,並得到其他的結果一樣:

輸出我在尋找:

2016-01-15 83.333333333333

2016-02-01 83.333333333333

2016-03-01 83.333333333333

2016-04-01 83.333333333333

2016-05-01 83.333333333333

2016-06-01 83.333333333333

2016-07-01 83.333333333333

2016-08-01 83.333333333333

2016-09-01 83.333333333333

2016-10-01 83.333333333333

2016-11-01 83.333333333333

2016-12-01 83.333333333333

所以第一DAT e(2016-01-15)應計算15個月到最後一個日期的日期,其他日期應按照上面顯示的順序進行。請人給一個建議,我已經找到一種方法通過執行以下代碼插入到第15天值:

$one_month_contract_value = ($contract_value/$contract_start_date_last_date);

echo $one_month_contract_value."
";

$initial_contract_value_for_first_month = ($one_month_contract_value*$no_of_days);

echo $initial_contract_value_for_first_month."
";

這給了我第一個月的合同價值,我可以直接插入到這個數據庫中。現在我怎麼才能繼續計算第一次約會的其他月份。

這是輸出現在我得到:

2016-01-15 43.010752688172

2016-01-01 83.333333333333

2016-02-01 83.333333333333

2016-03-01 83.333333333333

2016-04-01 83.333333333333

2016-05-01 83.333333333333

2016-06-01 83.333333333333

2016-07-01 83.333333333333

2016-08-01 83.333333333333

2016-09-01 83.333333333333

2016-10-01 83.333333333333

2016-11-01 83.333333333333

,總價值超過合同金額較小。

+0

我建議在foreach裏動態地計算$ no_of_days。這段代碼太複雜了,無法提供示例。我建議你在功能上分開它,它肯定會幫助你找到解決方案。 –

+0

我寫了開始日期和開始日期的月份之間的數據之間的數據的幾行,請檢查我的問題 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值