【问题标题】:time night differential computation in PHPPHP中的时间夜微分计算
【发布时间】:2012-05-18 22:45:12
【问题描述】:

我在获取员工的夜间差异时遇到了问题。夜差从晚上 10 点到早上 6 点开始。

如果员工从晚上 7 点到早上 5:30 上班,则应有 7 小时 30 分钟的夜间差异。

如何使用 PHP 进行计算?

非常感谢。

【问题讨论】:

    标签: php time computation


    【解决方案1】:
    <?php
    
    define('START_NIGHT_HOUR','22');
    define('START_NIGHT_MINUTE','00');
    define('START_NIGHT_SECOND','00');
    define('END_NIGHT_HOUR','06');
    define('END_NIGHT_MINUTE','00');
    define('END_NIGHT_SECOND','00');
    
    function night_difference($start_work,$end_work)
    {
        $start_night = mktime(START_NIGHT_HOUR,START_NIGHT_MINUTE,START_NIGHT_SECOND,date('m',$start_work),date('d',$start_work),date('Y',$start_work));
        $end_night   = mktime(END_NIGHT_HOUR,END_NIGHT_MINUTE,END_NIGHT_SECOND,date('m',$start_work),date('d',$start_work) + 1,date('Y',$start_work));
    
        if($start_work >= $start_night && $start_work <= $end_night)
        {
            if($end_work >= $end_night)
            {
                return ($end_night - $start_work) / 3600;
            }
            else
            {
                return ($end_work - $start_work) / 3600;
            }
        }
        elseif($end_work >= $start_night && $end_work <= $end_night)
        {
            if($start_work <= $start_night)
            {
                return ($end_work - $start_night) / 3600;
            }
            else
            {
                return ($end_work - $start_work) / 3600;
            }
        }
        else
        {
            if($start_work < $start_night && $end_work > $end_night)
            {
                return ($end_night - $start_night) / 3600;
            }
            return 0;
        }
    }
    
    var_dump(night_difference(strtotime('today 19:00'),strtotime('tomorrow 05:30')));
    var_dump(night_difference(strtotime('today 10:00'),strtotime('today 19:00')));
    var_dump(night_difference(strtotime('yesterday 10:00'),strtotime('today 08:00')));
    var_dump(night_difference(strtotime('yesterday 23:00'),strtotime('today 04:00')));
    

    输出:

    float(7.5)
    int(0)
    int(8)
    int(5)
    

    【讨论】:

    • 非常感谢您,我正在研究您的代码,目前正在根据您的代码构建自己的代码。赞一个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2020-04-21
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多