3

我有一张表格,显示了自从提出工作以来的时间。

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

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

我怎么能解决这个问题?

4

3 回答 3

5

你必须做的事情是数字3。

  1. 您取开始日期并计算这一天的休息时间(如果是工作日)
  2. 你取你的结束日期并计算这一天的时间,然后
  3. 您将中间的天数乘以您的营业时间(只是那些,即营业日)

这样你就完成了

找到一个附加的小类,它可以做这些事情。请注意,没有错误处理、时区设置、夏令时……

输入:

  • 开始日期
  • 结束日期

输出:

  • 以秒为单位的时间差

可调常数:

  • 营业时间
  • 非工作日的日子
于 2013-02-18T22:24:06.207 回答
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;
于 2021-01-26T07:34:16.533 回答
-1

使用DateTime.

为此使用 UNIX 时间有点荒谬,您必须从字面上重新制作DateTime.
查找相关格式,您可以在其中指定当天的小时,例如

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

剩下的就交给你了。

哦,而不是开始/结束,您可能可以使用DateInterval( P8H" period 8 hours" )

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

于 2013-02-18T13:23:24.653 回答