2011-12-29 145 views
-4

如何在PHP中編寫一個函數,返回沒有星期六,星期日和假日的交貨日期?無星期六,星期日和節假日返回交貨日期的函數

例如:對於同一產品交付在3天內爲其他人在5天內。

如果我今天做了一個命令,我會在3天內收到我的命令,而不是週六,週日和節假日。

如果我做我的命令現在「29/12/2011」的產品「3J」我將在「4/1/2011」

在數據庫中我收到你的命令就在一天多少每種類型的產品都是。

例如:

我試圖做一個功能,但沒有成功。

+0

請問您是否更詳細?這很不明確。 – 2011-12-29 15:03:22

+1

請提出一個更好的問題,並嘗試使用完整的句子。返回交貨日期?什麼交貨?從數據庫中獲取它?基於什麼?這麼多的問題,很少的信息... – Jules 2011-12-29 15:03:43

+1

你有沒有嘗試過自己?你走多遠了?做一些工作,然後再問別人爲你做... – Jordan 2011-12-29 15:04:07

回答

1

這是一個非常複雜的問題,你真的不能用一個簡單的功能修復。你在談論商業日計算策略,他們涉及很多想法。

如果您只想處理工作日而不處理營業時間,則稍微容易一些。

第一步是創建一個工作日或非工作日陣列。例如:

//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--; 
    } 
} 
0

看看:

http://php.net/manual/en/function.localtime.php

這將返回根據您提供的時間一個工作日。所以如果你現在的時間是X,你需要在2天內交貨,你會做localtime(X + 2*24*3600)。生成的結構將包含星期幾,您可以根據需要使用該星期幾向前或向後移動時間。

+0

日期delivry =日期,除了星期六星期天我brobleme HES我怎麼能做到這一點除了星期六4日(星期日) – 2011-12-29 15:23:09

+0

更換2 4其餘的現在+4天是一樣的。 – Karlson 2011-12-29 15:24:38

2

此代碼(輕微改變)生產用於我的網站之一:

// $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; 
} 
+0

它會失敗的唯一方法是如果你有整整一週作爲假期,在這種情況下,它將返回一個星期六。對我而言,這絕不會發生,所以我就這樣離開了它。 – Crontab 2011-12-29 15:10:15

+0

Crontab你是最好的thx男人它的工作像一個神奇的 – 2011-12-29 15:30:49

+0

爲什麼不創建一個函數(isHoliday),需要1天,並返回true/false。 – Frank 2011-12-29 15:41:08

相關問題