2017-08-30 103 views
0

我有一个计算订单的交货时间的窗体上的条件,遵循以下规则:创建规则,基于交货率创建时间

date_default_timezone_set('America/Sao_Paulo'); 
$Agora = date('H:i:s'); 
$HoraServico = date('H:i:s', strtotime('+69 minute', strtotime($Agora))); 

if ($entrega == '5.00'){ 
    $HoraServico = date('H:i:s', strtotime('+120 minute', strtotime($Agora))); 
} 

if ($entrega == '3.80'){ 
    $HoraServico = date('H:i:s', strtotime('+30 minute', strtotime($Agora))); 

} 

else if ($entrega == '7.0'){ 
    $HoraServico = date('H:i:s', strtotime('+20 minute', strtotime($Agora))); 

}; 

我需要的是建立一个规则,其中$ HoraServico基于交付价值$ entrega

示例:如果运送费用为7.00美元,那么交货时间将是当前时间($ Agora)+ 120分钟的总和。

如果送货费用为2.00美元,那么送货时间将是当前时间($ Agora)+ 30分钟的总和。等等。

这个想法是,交货率越高(因为交货率越高),交货成本的时间就越多。

我是这样测试的,但是不行!他仅添加一行:

$HoraServico = date('H:i:s', strtotime('+69 minute', strtotime($Agora)));

也就是说,一直在增加69分钟

据我了解,他不是计算正确的交付率实际上是从该行获得信息:

$entrega = $_POST["taxadeentrega"];

对不起,我的英语,我是巴西人,我使用翻译,葡萄牙语的社会,没有人回答!...

只是为了您的知识,它遵循计算运费价值的部分代码,本节选在JS文件中。

}if(cep == "20010-020" || cep == "20011-020" || cep == "20011-030" || cep == "20011-040" || cep == "20011-901" || cep == "20020-000" || cep == "20010-170" || cep == "20011-000" || cep == "20021-260" || cep == "20031-040" || cep == "20031-050" || cep == "20031-130" || cep == "20031-204" || cep == "20021-245" || cep == "20040-002" || cep == "21335-253" || cep == "20040-031" || cep == "20030-041" || cep == "20040-000" || cep == "20004-002" || cep == "20040-003" || cep == "20040-007" || cep == "20030-042" || cep == "20011-010"){ 

     //se for um dos ceps acima, incrementa 1.7 no valor final 
     taxa = 2.00; 


    }if(cep == "20010-090" || cep == "20020-100" || cep == "20021-130" || cep == "20021-315" || cep == "20030-001" || cep == "20031-000" || cep == "20031-003" || cep == "20031-010" || cep == "20031-050" || cep == "20031-141" || cep == "20031-143" || cep == "20031-005" || cep == "20031-001" || cep == "20020-903" || cep == "20031-144" || cep == "20030-080" || cep == "20031-142" || cep == "20031-120" || cep == "20031-007" || cep == "20010-009" || cep == "20031-913" || cep == "20021-370" || cep == "20200-100" || cep == "20030-901" || cep == "20030-021" || cep == "20210-030" || cep == "24220-280"){ 

     //se for um dos ceps acima, incrementa 1.2 no valor final 
     taxa = 1.50; 


    }if(cep == "20020-010"|| cep == "22050-032" || cep == "20020-040" || cep == "20020-080" || cep == "20021-060" || cep == "20021-120" || cep == "20021-900" || cep == "20021-903" || cep == "20030-002" || cep == "20030-015" || cep == "20030-013" || cep == "20030-020" || cep == "20030-021" || cep == "20030-060" || cep == "20030-070" || cep == "20030-120" || cep == "20002-080" || cep == "20002-008" || cep == "20003-021" || cep == "20030-905" || cep == "24220-031" || cep == "20002-010" || cep == "20030-015"){ 

     //se for um dos ceps acima, incrementa 0.7 no valor final 
     taxa = 1.00; 

    } 

total += taxa;  

if(taxa != 0){ 

//caso a taxa seja diferente de 0, mostra ao usuário 
    document.getElementById("idTaxa").innerHTML = "Additional charge R$ " + taxa; 
} 
+0

四件事情开始吗? 2.你永远不应该检查两个浮点是否完全相等,它们很少。 3.你用'=='比较两个值,因为'='是一个赋值。 4.一个“别”似乎不见了。 –

+0

我有这种形式的功能,其中每个CEP都有一个要收取的价值,我现在想要的是基于这个价值,增加一个时间。 我是外行,在葡萄牙社区我已经给了这个代码,这是不工作的,如果你能帮助我,我将非常感激。 –

回答

0

有一个简单而常见的错误代码:

if ($entrega = '5.00') { 

这是不正确的。这是为5.00的值赋值,而不是检查是否相等。

这应该是:

if ($entrega == '5.00') { 

同样的错误与所有的比较作出。

此代码也不干。同一代码行重复一遍又一遍:

$HoraServico = date('H:i:s', strtotime('+30 minute', strtotime($Agora))); 

这将是更好的,如果时间增量(即“30分钟”)是是在IF-THEN-ELSE设置一个变量,或更好的是在switch语句中,因为这些都是互斥的。

switch ($entraga) { 
    case '5.00': 
     $mins = '+120 minute'; 
     break; 
    case '2.00': 
     $mins = '+30 minute'; 
     break; 
    case '7.00': 
     $mins = '+20 minute'; 
     break; 

    default: 
     $mins = '+69 minute' 
} 
date_default_timezone_set('America/Sao_Paulo'); 
$Agora = date('H:i:s'); 
$HoraServico = date('H:i:s', strtotime($mins, strtotime($Agora))); 
+0

我按照你的解释说,但即使如此,他也不承认这个规则。这只是增加,总是69分钟。从我注意到的情况来看,他没有正确地阅读引用交付率的规则($ entrega) –

+0

只有在$ entraga设置正确的情况下,您的代码才有效。不包括该代码,但您应该通过回显$ entraga的值并检查它来进行调试。有了这个说法,考虑到在进行赋值和逻辑比较时出错,代码可能无法正常工作。 – gview

+0

谢谢倾听!它仍然继续加起来只有69分钟,我不知道为什么,但它不承认规则。 –

0

如果我不得不重写这段代码会是这样的:你为什么存储串的钱数1:

date_default_timezone_set('America/Sao_Paulo'); 

function deliveryTime($shippingCost) 
{ 
    $delay = 69; // minutes of delay in the delivery 
    if ($shippingCost >= 2.00) $delay += 30; // added minutes when shipping is over 2 
    if ($shippingCost >= 5.00) $delay += 30; // added minutes when shipping is over 5 
    if ($shippingCost >= 7.00) $delay += 30; // added minutes when shipping is over 7 
    return date('H:i:s', strtotime('+'.$delay.' minute')); 
} 

$horaServico = deliveryTime($entraga); 
+0

谢谢倾听!它仍然继续加起来只有69分钟,我不知道为什么,但它不承认规则。 –

+0

检查变量的时间。你可以通过在战略位置放置'echo '来做到这一点。我想知道'$ entraga'的内容。 –

+0

此递送速率($交货)通过这个代码加载: '$ entrega = $ _POST [“taxadeentrega”];' 在文件form.js具有通过计算输送的taxe的值的函数CEP并以字段taxadeentrega的形式显示。 –