Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript或PHP创建新日期,但只计算营业时间_Javascript_Php_Date - Fatal编程技术网

Javascript或PHP创建新日期,但只计算营业时间

Javascript或PHP创建新日期,但只计算营业时间,javascript,php,date,Javascript,Php,Date,我想创建一个脚本来计算基于今天的日期+X小时数的新日期是否会超过某个日期或更早。但是,我只想考虑营业时间(上午8点到晚上18点)和工作日(不是星期六或星期日)。 例:如果我的一天只有10个小时,而我不算周六或周日,那么今天的日期-2015年12月11日+30小时将产生哪个日期 我有一个脚本来做这件事,但它非常不可靠。有人有简单的解决方案吗?我在网上找不到任何东西 function Diferenca($data1, $data2, $tipo){ if($data2==""){ $dat

我想创建一个脚本来计算基于今天的日期+X小时数的新日期是否会超过某个日期或更早。但是,我只想考虑营业时间(上午8点到晚上18点)和工作日(不是星期六或星期日)。 例:如果我的一天只有10个小时,而我不算周六或周日,那么今天的日期-2015年12月11日+30小时将产生哪个日期

我有一个脚本来做这件事,但它非常不可靠。有人有简单的解决方案吗?我在网上找不到任何东西

function Diferenca($data1, $data2, $tipo){
if($data2==""){
    $data2 = date("d/m/Y H:i");
}
if($tipo==""){
    $tipo = "h";
}
for($i=1;$i<=2;$i++){
    ${"dia".$i} = substr(${"data".$i},0,2);
    ${"mes".$i} = substr(${"data".$i},3,2);
    ${"ano".$i} = substr(${"data".$i},6,4);
    ${"horas".$i} = substr(${"data".$i},11,2);
    ${"minutos".$i} = substr(${"data".$i},14,2);
}
$segundos = mktime($horas2,$minutos2,0,$mes2,$dia2,$ano2) - mktime($horas1,$minutos1,0,$mes1,$dia1,$ano1);
switch($tipo){
    case "m": $difere = $segundos/60;    break;
    case "H": $difere = $segundos/3600;    break;
    case "h": $difere = round($segundos/3600);    break;
    case "D": $difere = $segundos/86400;    break;
    case "d": $difere = round($segundos/86400);    break;
    case "s": $difere = $segundos;    break;
}
return $difere; }

function dec_Data($data){
$dia = substr($data, 8, 2);
$mes = substr($data, 5, 2);
$ano = substr($data, 0, 4);
$hr = substr($data, 11, 2);
$m = substr($data, 14, 2);
$data_retorno = $dia.'/'.$mes.'/'.$ano." ".$hr.":".$m;
return $data_retorno; }

if($data_cadastro_enc != '0000-00-00' and $data_cadastro_enc != '' and $sla_atend > 0 and $_POST["hora_abertura"] > 0 and $_POST["ativ_realizada"] != 'Projeto'){

    $data_cadastro_atend = $data_cadastro_enc." ".$_POST["hora_abertura"];  
    $ano_data_cadastro_atend = substr($data_cadastro_atend, 0, 4);
    $mes_data_cadastro_atend = substr($data_cadastro_atend, 5, 2);
    $dia_data_cadastro_atend = substr($data_cadastro_atend, 8, 2);
    $hr_data_cadastro_atend = substr($data_cadastro_atend, 11, 2);
    $mn_data_cadastro_atend = substr($data_cadastro_atend, 14, 2);

    $timestamp_atend = mktime($hr_data_cadastro_atend + $sla_atend, $mn_data_cadastro_atend, 0, $mes_data_cadastro_atend, $dia_data_cadastro_atend, $ano_data_cadastro_atend);

    $diaSemana = getDate($timestamp_atend);
    $diaValor = $diaSemana[weekday];

    $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);

    $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
    $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
    $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
    $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
    $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

    switch ($diaValor){     
        case "Saturday": $timestamp_atend = mktime($hr_nova_data_atend, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 2, $ano_nova_data_atend);
        break;

        case "Sunday": $timestamp_atend = mktime($hr_nova_data_atend, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 1, $ano_nova_data_atend);
        break;

        default: $timestamp_atend = mktime($hr_nova_data_atend, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);
    }

    $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    $val_hora_atend = $data_cadastro_enc." 18:00";

    while($nova_data_atend > $val_hora_atend){

        $data_dif = dec_Data($nova_data_atend);
        $data_dif_com = dec_Data($val_hora_atend);      

        $agora = Diferenca($data_dif_com, $data_dif, "m");

        $soma = $agora + 840;

        $ano_data_cadastro_atend_com = substr($val_hora_atend, 0, 4);
        $mes_data_cadastro_atend_com = substr($val_hora_atend, 5, 2);
        $dia_data_cadastro_atend_com = substr($val_hora_atend, 8, 2);
        $hr_data_cadastro_atend_com = substr($val_hora_atend, 11, 2);
        $mn_data_cadastro_atend_com = substr($val_hora_atend, 14, 2);

        $timestamp_atend = mktime($hr_data_cadastro_atend_com, $mn_data_cadastro_atend_com + $soma, 0, $mes_data_cadastro_atend_com, $dia_data_cadastro_atend_com, $ano_data_cadastro_atend_com);

        $diaSemana = getDate($timestamp_atend);
        $diaValor = $diaSemana[weekday];

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);

        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        switch($diaValor){      
            case "Saturday": $timestamp_atend = mktime($hr_nova_data_atend, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 2, $ano_nova_data_atend);
            break;

            case "Sunday": $timestamp_atend = mktime($hr_nova_data_atend, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 1, $ano_nova_data_atend);
            break;

            default: $timestamp_atend = mktime($hr_nova_data_atend, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);
        }

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
        $val_hora_atend = substr($nova_data_atend, 0, 10)." 18:00";

    }

    $hr_nova_data = substr($nova_data_atend, 11, 2);

    if($hr_nova_data == 0){
        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        $timestamp_atend = mktime($hr_nova_data_atend + 14, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    } else if($hr_nova_data == 1) {
        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        $timestamp_atend = mktime($hr_nova_data_atend + 15, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    } else if($hr_nova_data == 2) {
        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        $timestamp_atend = mktime($hr_nova_data_atend + 16, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    } else if($hr_nova_data == 3) {
        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        $timestamp_atend = mktime($hr_nova_data_atend + 17, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    } else if($hr_nova_data == 4) {
        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        $timestamp_atend = mktime($hr_nova_data_atend + 32, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);

        $diaSemana = getDate($timestamp_atend);
        $diaValor = $diaSemana[weekday];

        switch($diaValor){      
            case "Saturday": $timestamp_atend = mktime($hr_nova_data_atend + 32, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 2, $ano_nova_data_atend);
            break;

            case "Sunday": $timestamp_atend = mktime($hr_nova_data_atend + 32, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 1, $ano_nova_data_atend);
            break;

            default: $timestamp_atend = mktime($hr_nova_data_atend + 32, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);
        }

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    } else if($hr_nova_data == 5) {
        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        $timestamp_atend = mktime($hr_nova_data_atend + 33, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);

        $diaSemana = getDate($timestamp_atend);
        $diaValor = $diaSemana[weekday];

        switch($diaValor){      
            case "Saturday": $timestamp_atend = mktime($hr_nova_data_atend + 33, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 2, $ano_nova_data_atend);
            break;

            case "Sunday": $timestamp_atend = mktime($hr_nova_data_atend + 33, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 1, $ano_nova_data_atend);
            break;

            default: $timestamp_atend = mktime($hr_nova_data_atend + 33, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);
        }

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    } else if($hr_nova_data == 6) {
        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        $timestamp_atend = mktime($hr_nova_data_atend + 34, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);

        $diaSemana = getDate($timestamp_atend);
        $diaValor = $diaSemana[weekday];

        switch($diaValor){      
            case "Saturday": $timestamp_atend = mktime($hr_nova_data_atend + 34, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 2, $ano_nova_data_atend);
            break;

            case "Sunday": $timestamp_atend = mktime($hr_nova_data_atend + 34, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 1, $ano_nova_data_atend);
            break;

            default: $timestamp_atend = mktime($hr_nova_data_atend + 34, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);
        }

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    } else if($hr_nova_data == 7) {
        $ano_nova_data_atend = substr($nova_data_atend, 0, 4);
        $mes_nova_data_atend = substr($nova_data_atend, 5, 2);
        $dia_nova_data_atend = substr($nova_data_atend, 8, 2);
        $hr_nova_data_atend = substr($nova_data_atend, 11, 2);
        $mn_nova_data_atend = substr($nova_data_atend, 14, 2);

        $timestamp_atend = mktime($hr_nova_data_atend + 35, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);

        $diaSemana = getDate($timestamp_atend);
        $diaValor = $diaSemana[weekday];

        switch($diaValor){      
            case "Saturday": $timestamp_atend = mktime($hr_nova_data_atend + 35, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 2, $ano_nova_data_atend);
            break;

            case "Sunday": $timestamp_atend = mktime($hr_nova_data_atend + 35, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend + 1, $ano_nova_data_atend);
            break;

            default: $timestamp_atend = mktime($hr_nova_data_atend + 35, $mn_nova_data_atend, 0, $mes_nova_data_atend, $dia_nova_data_atend, $ano_nova_data_atend);
        }

        $nova_data_atend = date("Y-m-d H:i", $timestamp_atend);
    }

    $sla_atend_data = $nova_data_atend;
}
函数差异($data1、$data2、$tipo){
如果($data2==“”){
$data2=日期(“d/m/Y H:i”);
}
如果($tipo==“”){
$tipo=“h”;
}
对于($i=1;$i 0和$u POST[“hora_abertura”]>0和$u POST[“ativ_realizada”]!='Projeto'){
$data\u cadastro\u atend=$data\u cadastro\u enc.“$\u POST[“hora\u abertura”];
$ano_data_cadastro_atend=substr($data_cadastro_atend,0,4);
$mes\U data\U cadastro\U atend=substr($data\U cadastro\U atend,5,2);
$dia_data_cadastro_atend=substr($data_cadastro_atend,8,2);
$hr\u data\u cadastro\u atend=substr($data\u cadastro\u atend,11,2);
$mn_data_cadastro_atend=substr($data_cadastro_atend,14,2);
$timestamp\u atend=mktime($hr\u data\u cadastro\u atend+$sla\u atend,$mn\u data\u cadastro\u atend,0,$mes\u data\u cadastro\u atend,$dia\u data\u cadastro\u atend,$ano\u data\u cadastro\u atend);
$diaSemana=getDate($timestamp\u-atend);
$diaValor=$diaSemana[工作日];
$nova_data_atend=日期(“Y-m-d H:i”,$timestamp_atend);
$ano_nova_data_atend=substr($nova_data_atend,0,4);
$mes_nova_data_atend=substr($nova_data_atend,5,2);
$dia_nova_data_atend=substr($nova_data_atend,8,2);
$hr_nova_data_atend=substr($nova_data_atend,11,2);
$mn_nova_data_atend=substr($nova_data_atend,14,2);
开关($diaValor){
案例“星期六”:$timestamp\u atend=mktime($hr\u nova\u data\u atend,$mn\u nova\u data\u atend,0,$mes\u nova\u data\u atend,$dia\u nova\u data\u atend+2,$ano\u nova\u data\u atend);
打破
案例“星期日”:$timestamp\u atend=mktime($hr\u nova\u data\u atend,$mn\u nova\u data\u atend,0,$mes\u nova\u data\u atend,$dia\u nova\u data\u atend+1,$ano\u nova\u data\u atend);
打破
默认值:$timestamp_atend=mktime($hr_nova_data_atend,$mn_nova_data_atend,0,$mes_nova_data_atend,$dia_nova_data_atend,$ano_nova_data_atend);
}
$nova_data_atend=日期(“Y-m-d H:i”,$timestamp_atend);
$val_hora_atend=$data_cadastro_enc.“18:00”;
而($nova\u data\u atend>$val\u hora\u atend){
$data\u dif=dec\u data($nova\u data\u atend);
$data\u dif\u com=dec\u data($val\u hora\u atend);
$agora=diference($data_dif_com,$data_dif,“m”);
$soma=$agora+840;
$ano_data_cadastro_atend_com=substr($val_hora_atend,0,4);
$mes_data_cadastro_atend_com=substr($val_hora_atend,5,2);
$dia_data_cadastro_atend_com=substr($val_hora_atend,8,2);
$hr_data_cadastro_atend_com=substr($val_hora_atend,11,2);
$mn_data_cadastro_atend_com=substr($val_hora_atend,14,2);
$timestamp_atend=mktime($hr_data_cadastro_atend_com、$mn_data_cadastro_atend_com+$soma,0、$mes_data_cadastro_atend_com、$dia_data_cadastro_atend_com、$ano_data_cadastro atend_com);
$diaSemana=getDate($timestamp\u-atend);
$diaValor=$diaSemana[工作日];
$nova_data_atend=日期(“Y-m-d H:i”,$timestamp_atend);
$ano_nova_data_atend=substr($nova_data_atend,0,4);
$mes_nova_data_atend=substr($nova_data_atend,5,2);
$dia_nova_data_atend=substr($nova_data_atend,8,2);
$hr_nova_data_atend=substr($nova_data_atend,11,2);
$mn_nova_data_atend=substr($nova_data_atend,14,2);
开关($diaValor){
案例“星期六”:$timestamp\u atend=mktime($hr\u nova\u data\u atend,$mn\u nova\u data\u atend,0,$mes\u nova\u data\u atend,$dia\u nova\u data\u atend+2,$ano\u nova\u data\u atend);
打破
案例“星期日”:$timestamp\u atend=mktime($hr\u nova\u data\u atend,$mn\u nova\u data\u atend,0,$mes\u nova\u data\u atend,$dia\u nova\u data\u atend+1,$ano\u nova\u data\u atend);
打破
默认值:$timestamp_atend=mktime($hr_nova_data_atend,$mn_nova_data_atend,0,$mes_nova_data_atend,$dia_nova_data_atend,$ano_nova_data_atend);
}
$nova_data_atend=日期(“Y-m-d H:i”,$timestamp_atend);
$val_hora_atend=substr($nova_data_atend,0,10)。“18:00”;
}
$hr_nova_data=substr($nova_data_atend,11,2);
如果($hr\u nova\u data==0){
$ano_nova_data_atend=substr($nova_data_atend,0,4);
$mes_nova_data_atend=substr($nova_data_atend,5,2);
$dia_nova_data_atend=substr($nova_data_atend,8,2);
$hr_nova_data_atend=substr($nova_data_atend,11,2);
$mn_nova_data_atend=substr($nova_data_atend,14,2);
$timestamp_atend=mktime($hr_nova_data_atend+14,$mn_nova_data_atend,0,$mes_nova_data_atend,$dia_nova_data_atend,$ano_nova_data_atend);
$nova_data_atend=日期(“Y-m-d H:i”,$timestamp_atend);
}否则如果($hr\u nova\u data==1){
$ano_nova_data_atend=substr($nova_data_atend,0,4);
$mes_nova_data_atend=substr($nova_data_atend,5,2);
$dia_nova_data_atend=substr($nova_data_atend,8,2);
$hr_nova_data_atend=substr($nova_data_atend,11,2);
$mn_nova_data_atend=substr($nova_data_atend,14,2);
$timestamp_atend=mktime($hr_nova_data_atend+15,$mn_nova_data_atend,0,$mes_nova_data_atend,$dia_nova_data_atend,$ano_nova_data_atend);
$nova_data_atend=日期(“Y-m-d H:i”,$timestamp_atend);
}否则如果($hr\u nova\u data==2){
$ano_nova_data_atend=substr($nova_data_atend,0,4);
$mes_nova_data_atend=substr($nova_data_atend,5,2);
$dia_nova_data_atend=substr($nova_data_atend,8,2);
$hr_nova_data_atend=substr($nova_data_atend,11,2);
$mn_nova_data_atend=substr($nova_data_atend,14,2);
$
var currentDate = new Date(); // new Date object with current date/time
currentDate; // "Fri Dec 11 2015 09:45:39 GMT-0800 (PST)"
currentDate.getHours(); // returns hours past midnight, in this case '9'
currentDate.getMinutes(); // returns minutes past last whole hour, in this case 45
currentDate.getDay(); // returns a number 1-7 representing Monday through Sunday

// creating a future date
var futureDate = new Date(2015, 12, 14, 9, 30); // 12/14/2015 at 9:30 AM
// the format is (year, month, date, hour, minute)
function getDateCompleted($date, $hours, $hoursPerDay) {
  if ($hoursPerDay == 0) {
    // Will never reach and prevent division by zero
    return null;
  }

  $daysToComplete = ceil((float)$hours / $hoursPerDay);
  $days = 0;
  $time =strtotime($date);
  while ($days < $daysToComplete) {
    // Check for weekend
     if (!(date('N', $date) >= 6)) {
        $current = $time;
        $days++;
    }
    $time = strtotime("+1 day", $time);
  }
  return date("Y-m-d", $current);
}

echo getDateCompleted("11/12/2015", 30, 10);
function foo(start_time, plus_hours) {
    var time = new Date(+start_time),
        day;
    // rewind to the start of the hour
    time.setMinutes(0, 0, 0);
    // then
    if (time.getHours() < 8) { // if before work day
        time.setHours(8); // fast forward to start of work hours
    }
    if (time.getHours() >= 18) { // if after work day
        time.setDate(time.getDate() + 1);  // fast forward to tomorrow
        time.setHours(8); // start of work hours
    }
    if ([0, 6].indexOf(time.getDay()) !== -1) { // if it is weekend
        day = (time.getDay() && 2) || 1; // (no setDay method)
        time.setDate(time.getDate() + day); // fast foward to monday
        time.setHours(8); // start of work hours
    }
    // now convert plus_hours into day-length equivalents (i.e. add 14 hours for each 10 hours)
    plus_hours = plus_hours + (plus_hours - Math.floor(plus_hours % (18 - 8))) * (24 - (18 - 8)) / (18 - 8);
    // now work out how many hours we have until saturday
    day = time.getDay();
    day = (6 - day) * 24;
    day = day - time.getHours();
    // then
    if (plus_hours > day) { // if we are going to cross into future weeks
        // add 48 hours for each week (i.e. each 5 days)
        plus_hours = plus_hours - day;
        plus_hours = (plus_hours - Math.floor(plus_hours % (5 * 24))) * (2 * 24) / 5;
        plus_hours = plus_hours + day + 2 * 24;
    }
    return new Date(+time + plus_hours * 60 * 60 * 1000);
}