
Частый посетитель

Покинул форум
Сообщений всего: 877
Дата рег-ции: Март 2017
Откуда: Германия, Бавария
Помог: 37 раз(а)

|
Noobster пишет:Дайте нуббу ответ, пробую, но чтото с багами
те как определить в какой диапазон попадает количество дней 
Добрый день!
РНР без Carbon Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
<?PHP function getDateTime($date){ $format = "m/d/Y G:ia"; return DateTime::createFromFormat($format, $date); } function getDiffInDays($dateTimeStart, $dateTimeEnd){ return $dateTimeStart->diff($dateTimeEnd)->d; } $start_day = getDateTime("07/27/2022 03:40 pm"); $end_day = getDateTime("07/30/2022 03:40 pm"); $price = "45.25"; $discounts = [ 0 => [0 => "1-2", 1 => "0", 2 => "10"], 5 => [0 => "3-7", 1 => "5", 2 => "15"], 10 => [0 => "8-12", 1 => "10", 2 => "20"] ]; $total_days = getDiffInDays($start_day, $end_day); $total_price = $price * $total_days; foreach ($discounts as $value) { $day_value = explode("-", $value[0 ]); $min_day = $day_value[0]; $max_day = $day_value[1]; $price_discount = $value[1] * $total_days; $total_price -= $price_discount; break; } } echo $total_price; ?>
JS (ECMAScript)Спойлер (Отобразить)CODE ( javascript):
скопировать код в буфер обмена
<script> //functions getDiffInDays = function(dateStartStr, dateEndStr){ dateStart = new Date(dateStartStr); dateEnd = new Date(dateEndStr); DiffInTime = Math.abs(dateEnd.getTime() - dateStart.getTime()); return DiffInTime/(1000 * 3600 * 24); } range = (a,b) => [...Array(parseInt(b)+1).keys()].slice(parseInt(a)); //------------------------------------------------------------------- discounts = { 0:{0:"1-2", 1:"0", 2:"10"}, 5:{0:"3-7", 1:"5", 2:"15"}, 10:{0:"8-12", 1:"10", 2:"20"} }; price = 45.25; dateStartStr = "07/27/2022 03:40 pm"; dateEndStr = "07/30/2022 03:40 pm"; total_days = getDiffInDays(dateStartStr, dateEndStr); total_price = price * total_days; document.write("price: "+price+ "<br>"); document.write("dateStart: "+dateStartStr + "<br>"); document.write("dateEnd: "+ dateEndStr + "<br>"); document.write("total days: "+ total_days + "<br>"); document.write("total price: "+ total_price +"<br>"); for(ind in discounts) { value = discounts[ind]; day_value = value[0].split("-"); min_day = day_value[0]; max_day = day_value[1]; console.log(day_value); if(range(min_day, max_day).includes(total_days)) { price_discount = value[1] * total_days; total_price -= price_discount; break; } } document.write("----------------------------------<br>"); document.write("price discount: "+ price_discount +"<br>"); document.write("total price: "+ total_price +"<br>"); /* price: 45.25 dateStart: 07/27/2022 03:40 pm dateEnd: 07/30/2022 03:40 pm total days: 3 total price: 135.75 ---------------------------------- price discount: 15 total price: 120.75 */ </script>
Удачи!(Отредактировано автором: 23 Августа, 2022 - 14:21:46)
|