无星期六,星期日和节假日返回交货日期的函数

无星期六,星期日和节假日返回交货日期的函数

问题描述:

如何在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

这是一个非常复杂的问题,你真的不能用一个简单的功能修复。你在谈论商业日计算策略,他们涉及很多想法。

如果您只想处理工作日而不处理营业时间,则稍微容易一些。

第一步是创建一个工作日或非工作日阵列。例如:

//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)。生成的结构将包含星期几,您可以根据需要使用该星期几向前或向后移动时间。

+0

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

+0

更换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; 
} 
+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