PHP - 从时差中排除所有非营业时间/天

时间:2013-02-18 13:09:52

标签: php time timestamp

我有一张表格,显示自工作成立以来的时间。

// These are unix epoch times...
$raised = 1360947684;
$now = 1361192598;
$difference = 244914;

$difference需要排除营业时间以外的任何时间(例如,9-5和周末)。

我怎么能解决这个问题?

3 个答案:

答案 0 :(得分:4)

你需要做的就是3个数字。

  1. 您将获取开始日期并计算当天的休息时间(如果是营业日)
  2. 您将结束日期并计算当天的时间和
  3. 您需要花费两天的时间并将它们与您的营业时间相乘(只是那些,即工作日)
  4. 随着that你完成了。

    找一个附加的小班,做那些事情。请注意,没有错误处理,时区设置,夏令时,......

    输入:

    • 开始日期
    • 结束日期

    输出:

    • 以秒为单位的差异时间

    可调节常数:

    • 营业时间
    • 非工作日的日子

答案 1 :(得分:0)

非常糟糕的主意,但我别无选择,因为我使用的是 php 5.2

<?php
date_default_timezone_set('Asia/Seoul');

$start = 1611564957;
$end = 1611670000;
$res = 0;
for($i = $start; $i<$end; $i++){

    $h = date("H", $i);
    if($h >= 9 && $h < 18){
        //echo date("Y-m-d H:i:s", $i) . "<br>";
        $res = $res + 1;
    }
}
echo $res;

答案 2 :(得分:-1)

使用DateTime

使用UNIX时间这有点荒谬,你必须重新翻译DateTime
查找relative formats,您可以在其中指定当天的小时,例如

$date = new DateTime($raised);
$business_start = new DateTime("09:00"); // 9am today
$business_end = new DateTime("17:00"); // 5pm today

剩下的就是让你锻炼身体。

哦,而不是开始/结束,你可以使用值P8H的{​​{3}}(“期间8小时”

直接使用时间戳的问题在于您要为秒的计数器分配上下文。您必须从想要排除的时间开始向后工作,并事先计算出时间戳。您可能想尝试重新设计作业被提升时的存储空间。也许为它设定一个到期时间?