2017-08-30 52 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的形式顯示。 –