dormbaf90464 2015-03-27 12:18
浏览 30
已采纳

每天循环播放数小时

I am really stuck on the code, and I dont know how to solve it. I am trying to calculate how much I earn a day. The problem is that I earn different amount depending on which hour on a day it is. Fx:

08.00 - 06.00  (Morning) -> 150
06.00 - 10.00 (Evening) -> 200
10.00 - 11.00 (Night) -> 250

So I have calculated how much hours I work a day with this code:

<p>Choose Your Work TIme</p>
    <form method='post'>
        <select name="s1" required>
        <option>Choose Start Time</option>
            <option value="8.45">8.45</option>
            <option value="9.00">9.00</option>
            <option value="9.15">9.15</option>
            <option value="9.30">9.30</option>
            <option value="9.45">9.45</option>
            <option value="10.00">10.00</option>
            <option value="10.15">10.15</option>
            <option value="10.30">10.30</option>
            <option value="10.45">10.45</option>
            <option value="11.00">11.00</option>
            <option value="11.15">11.15</option>
            <option value="11.30">11.30</option>
            <option value="11.45">11.45</option>
            <option value="12.00">12.00</option>
            <option value="12.15">12.15</option>
            <option value="12.30">12.30</option>
            <option value="12.45">12.45</option>
            <option value="13.00">13.00</option>
            <option value="13.15">13.15</option>
            <option value="13.30">13.30</option>
            <option value="13.45">13.45</option>
            <option value="14.00">14.00</option>
            <option value="14.15">14.15</option>
            <option value="14.30">14.30</option>
            <option value="14.45">14.45</option>
            <option value="15.00">15.00</option>
            <option value="15.15">15.15</option>
            <option value="15.30">15.30</option>
            <option value="15.45">15.45</option>
            <option value="16.00">16.00</option>
            <option value="16.15">16.15</option>
            <option value="16.30">16.30</option>
            <option value="16.45">16.45</option>
            <option value="17.00">17.00</option>
            <option value="17.15">17.15</option>
            <option value="17.30">17.30</option>
            <option value="17.45">17.45</option>
            <option value="18.00">18.00</option>
            <option value="18.15">18.15</option>
            <option value="18.30">18.30</option>
            <option value="18.45">18.45</option>
            <option value="19.00">19.00</option>
            <option value="19.15">19.15</option>
            <option value="19.30">19.30</option>
            <option value="19.45">19.45</option>
            <option value="20.00">20.00</option>
            <option value="20.15">20.15</option>
            <option value="20.30">20.30</option>
            <option value="20.45">20.45</option>
            <option value="21.00">21.00</option>
            <option value="21.15">21.15</option>
            <option value="21.30">21.30</option>
            <option value="21.45">21.45</option>
            <option value="22.00">22.00</option>
            <option value="22.15">22.15</option>
            <option value="22.30">22.30</option>
            <option value="22.45">22.45</option>
            <option value="23.00">23.00</option>
            <option value="23.15">23.15</option>
            <option value="23.30">23.30</option>
        </select>
        <select name="s2" required>
            <option>Choose End Time</option>
            <option value="8.45">8.45</option>
            <option value="9.00">9.00</option>
            <option value="9.15">9.15</option>
            <option value="9.30">9.30</option>
            <option value="9.45">9.45</option>
            <option value="10.00">10.00</option>
            <option value="10.15">10.15</option>
            <option value="10.30">10.30</option>
            <option value="10.45">10.45</option>
            <option value="11.00">11.00</option>
            <option value="11.15">11.15</option>
            <option value="11.30">11.30</option>
            <option value="11.45">11.45</option>
            <option value="12.00">12.00</option>
            <option value="12.15">12.15</option>
            <option value="12.30">12.30</option>
            <option value="12.45">12.45</option>
            <option value="13.00">13.00</option>
            <option value="13.15">13.15</option>
            <option value="13.30">13.30</option>
            <option value="13.45">13.45</option>
            <option value="14.00">14.00</option>
            <option value="14.15">14.15</option>
            <option value="14.30">14.30</option>
            <option value="14.45">14.45</option>
            <option value="15.00">15.00</option>
            <option value="15.15">15.15</option>
            <option value="15.30">15.30</option>
            <option value="15.45">15.45</option>
            <option value="16.00">16.00</option>
            <option value="16.15">16.15</option>
            <option value="16.30">16.30</option>
            <option value="16.45">16.45</option>
            <option value="17.00">17.00</option>
            <option value="17.15">17.15</option>
            <option value="17.30">17.30</option>
            <option value="17.45">17.45</option>
            <option value="18.00">18.00</option>
            <option value="18.15">18.15</option>
            <option value="18.30">18.30</option>
            <option value="18.45">18.45</option>
            <option value="19.00">19.00</option>
            <option value="19.15">19.15</option>
            <option value="19.30">19.30</option>
            <option value="19.45">19.45</option>
            <option value="20.00">20.00</option>
            <option value="20.15">20.15</option>
            <option value="20.30">20.30</option>
            <option value="20.45">20.45</option>
            <option value="21.00">21.00</option>
            <option value="21.15">21.15</option>
            <option value="21.30">21.30</option>
            <option value="21.45">21.45</option>
            <option value="22.00">22.00</option>
            <option value="22.15">22.15</option>
            <option value="22.30">22.30</option>
            <option value="22.45">22.45</option>
            <option value="23.00">23.00</option>
            <option value="23.15">23.15</option>
            <option value="23.30">23.30</option>
        </select>
        <input type="submit" name="submit" Value="Submit">
    </form> 

Lets say I work from 10.00 in the morning to 11.00 in the night. That would mean I work 13 hours. But how can i calculate how much money I earn in the above time period? I have tried the following but nothing is working:

<?php


// create timeblocks:
// 8  = from 0.00 untill 8.00 
// 18 = from 8.00 untill 18.00
// 24 = from 18.00 untill 0.00
$timeblocks=array(
    8*60,
    18*60,
    24*60
    );
//earnings PER 15 MINUTES in the above timeblocks
$money=array(
    146/4,
    204/4,
    244/4
    );
$earned=0;

//create a start and end time object
$start=date_create_from_format('Y-m-d H:i:s', $_POST['s1']);
$end=date_create_from_format('Y-m-d H:i:s', $_POST['s2']);

//calculate how many blocks of 15 minutes
$diff=$start->diff($end);
$steps=(($diff->d)*3600+($diff->h)*60+($diff->i))/15;

//loop every 15 minutes
for($i=0;$i<=$steps;$i++){
    //start with the start date, and add 15 minutes every time
    if($i!==0)$start->add(new DateInterval('PT15M'));

    //calculate the time 
    $time=((int)($start->format('H')*60)+(int)($start->format('i')));

    //look in timeblocks what block we are in and get the earnings from that block
    for($block=0;$block<3;$block++){
        if($time<=$timeblocks[$block]){
            $earned+=$money[$block];
            echo '$'.$money[$block].' earned at '.$start->format('d-m-Y H:i:s').'<br>';
            break;
            }
        }
    }

echo 'TOTAL earned: $'.$earned; 


?>

I hope somebody can help me.

Best Regards Mads

  • 写回答

3条回答 默认 最新

  • dopt85756 2015-03-27 15:30
    关注

    I'm sure there are better solutions, but this works :-)

    [edit] to meet OP's new requirements

    //If you haven't done allready SET your timezone!!
    date_default_timezone_set('Europe/Amsterdam');
    
    // create timeblocks:
    // 8  = from 0.00 untill 8.00 
    // 18 = from 8.00 untill 18.00
    // 24 = from 18.00 untill 0.00
    $timeblocks=array(
        8*60,
        18*60,
        24*60
        );
    //earnings PER 15 MINUTES in the above timeblocks
    $money=array(
        100/4,
        10/4,
        50/4
        );
    $earned=0;
    
    $_POST['s1']='18.30';
    $_POST['s2']='8.30';
    
    //sanitize your post: only numbers and a dot allowed
    $s1=preg_replace("/[^0-9|.]/","",$_POST['s1']);
    $s2=preg_replace("/[^0-9|.]/","",$_POST['s2']);
    
    if($s1==$s2){
        //no working time: do something
        //NOTE: this assumes nobody working for 24 hours, because if you start at 
        //6pm day 1 and end 6pm on the next day (==24 hours) the times are the same 
        //as well.
        }
    
    //if second time smaller then first time, we are in the next day and add 24 hours
    $add=0;
    if($s1>$s2)$add=24;
    
    //make hours and minutes
    $s1=explode('.',substr('0'.$s1,-5));
    $s2=explode('.',substr('0'.$s2,-5));
    
    //create a start and end time object
    $start=new Datetime('now');
    $start->setTime($s1[0],$s1[1]);
    
    $end=new Datetime('now');
    $end->setTime($s2[0]+$add,$s2[1]);
    
    
    //calculate how many blocks of 15 minutes
    $diff=$start->diff($end);
    $steps=(($diff->d)*3600+($diff->h)*60+($diff->i))/15;
    
    //loop every 15 minutes
    for($i=1;$i<=$steps;$i++){
        //start with the start date, and add 15 minutes every time
        $start->add(new DateInterval('PT15M'));
    
        //calculate the time 
        $time=((int)($start->format('H')*60)+(int)($start->format('i')));
    
        //look in timeblocks what block we are in and get the earnings from that block
        for($block=0;$block<3;$block++){
            if($time<=$timeblocks[$block]){
                $earned+=$money[$block];
                echo '$'.$money[$block].' earned at '.$start->format('d-m-Y H:i:s').'<br>';
                break;
                }
            }
        }
    
    echo 'TOTAL earned: $'.$earned; 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计