如何在PHP中編寫一個函數,返回沒有星期六,星期日和假日的交貨日期?無星期六,星期日和節假日返回交貨日期的函數
例如:對於同一產品交付在3天內爲其他人在5天內。
如果我今天做了一個命令,我會在3天內收到我的命令,而不是週六,週日和節假日。
如果我做我的命令現在「29/12/2011」的產品「3J」我將在「4/1/2011」
在數據庫中我收到你的命令就在一天多少每種類型的產品都是。
例如:
我試圖做一個功能,但沒有成功。
如何在PHP中編寫一個函數,返回沒有星期六,星期日和假日的交貨日期?無星期六,星期日和節假日返回交貨日期的函數
例如:對於同一產品交付在3天內爲其他人在5天內。
如果我今天做了一個命令,我會在3天內收到我的命令,而不是週六,週日和節假日。
如果我做我的命令現在「29/12/2011」的產品「3J」我將在「4/1/2011」
在數據庫中我收到你的命令就在一天多少每種類型的產品都是。
例如:
我試圖做一個功能,但沒有成功。
這是一個非常複雜的問題,你真的不能用一個簡單的功能修復。你在談論商業日計算策略,他們涉及很多想法。
如果您只想處理工作日而不處理營業時間,則稍微容易一些。
第一步是創建一個工作日或非工作日陣列。例如:
//Build the days based of weekends
$nonWorkingDays = array();
foreach($iDate = 0; $iDate < 365; $iDate++){
$date = strtotime('today +'.$iDate.' day');
if(date('w', $date) == 0 || date('w', $date) == 6){
$nonWorkingDays = date('Y-m-d', $date);
}
}
//Add the holidays
$nonWorkingDays[] = '2011-12-25';
$nonWorkingDays[] = '2012-01-01';
//Determine the date of delivery
$daysToDelivery = 6;
$deliveryDate = time();
while($daysToDelivery > 0){
$deliveryDate = time() + (24*60*60);
if(!in_array(date('Y-m-d', $deliveryDate), $nonWorkingDays)){
$daysToDelivery--;
}
}
看看:
http://php.net/manual/en/function.localtime.php
這將返回根據您提供的時間一個工作日。所以如果你現在的時間是X,你需要在2天內交貨,你會做localtime(X + 2*24*3600)
。生成的結構將包含星期幾,您可以根據需要使用該星期幾向前或向後移動時間。
日期delivry =日期,除了星期六星期天我brobleme HES我怎麼能做到這一點除了星期六4日(星期日) – 2011-12-29 15:23:09
更換2 4其餘的現在+4天是一樣的。 – Karlson 2011-12-29 15:24:38
此代碼(輕微改變)生產用於我的網站之一:
// $dt = date of shipping, $numdays = expected number of days in transit
function realDeliveryDate($dt, $numdays)
{
$holidays = array("05/30/2011","07/04/2011","09/05/2011","11/24/2011","11/25/2011","12/25/2011","12/31/2011","01/01/2012","05/28/2012","07/04/2012","09/03/2012","11/22/2012","11/23/2012","12/25/2012");
$checkday = strtotime($dt." +".$numdays." days");
// check if it's a holiday
while(in_array(date("m/d/Y",$checkday), $holidays)) {
$checkday = strtotime(date("m/d/Y",$checkday)." +1 day");
}
// make sure it's not Saturday
if (date("w",$checkday) == 6) {
$checkday = strtotime(date("m/d/Y",$checkday)." +2 days");
}
// make sure it's not Sunday
if (date("w",$checkday) == 0) {
$checkday = strtotime(date("m/d/Y",$checkday)." +1 day");
}
// make sure it's not another holiday
while(in_array(date("m/d/Y",$checkday), $holidays)) {
$checkday = strtotime(date("m/d/Y",$checkday)." +1 day");
}
return $checkday;
}
請問您是否更詳細?這很不明確。 – 2011-12-29 15:03:22
請提出一個更好的問題,並嘗試使用完整的句子。返回交貨日期?什麼交貨?從數據庫中獲取它?基於什麼?這麼多的問題,很少的信息... – Jules 2011-12-29 15:03:43
你有沒有嘗試過自己?你走多遠了?做一些工作,然後再問別人爲你做... – Jordan 2011-12-29 15:04:07