php - 计算时间粒度

标签 php datetime

我需要在 PHP 网站上实现以下目标。

我们的用户在他们的应用中指定了一个“粒度”值 - 即 14400,代表 4 小时的时间。

现在,基本上我需要做的是从午夜开始根据这个粒度来跟踪“ Action ”——例如,如果 Action 发生在凌晨 03:15,它将在 00:00 - 03 之间被跟踪: 59,同样如果一个 Action 发生在凌晨 4:25,它会在 04:00 - 07:59 下被跟踪。

我正在尝试编写一个具有以下内容的函数:

function _get_granulation($granulation)
{
    $time = date("G:i"); // Gives us current time (e.g. 04:15 or 22:10)
    $iterations = ($granulation/86400); // Number of iterations in a 24hr period    
}

现在我对从这里去哪里有点困惑。

基本上,我需要它做的就是将时间值传回,表示记录条目的时间范围。

有人可以在这里提供建议/帮助吗?

最佳答案

这个函数应该给你你正在寻找的东西:

function _get_granulation($granulation, $now = null) {
    if (is_null($now)) $now = time();
    $daySecs = date('G', $now) * 3600 + date('i', $now) * 60 + date('s', $now);
    $segment = $granulation * floor($daySecs / $granulation);
    $hrs = floor($segment / 3600);
    $min = floor(($segment - $hrs * 3600) / 60);
    $sec = $segment - $hrs * 3600 - $min * 60;
    return date('H:i:s', mktime($hrs, $min, $sec));
}

我不直接使用 unix 时间戳,以避免夏令时问题,而是使用实际的小时/分钟/秒值。

我添加了一个额外的参数来帮助测试,因此我们不必总是使用当前时间。这允许像这样的测试脚本:

$times = array('10:30:00', '07:59:00', '23:20:00');
$granulations = array(21600, 14400, 3600, 1800);
foreach ($granulations as $g) foreach ($times as $t) {
    $segment = _get_granulation($g, strtotime($t));
    echo("{$t} / {$g} = {$segment}\n");
}

产生这样的输出:

10:30:00 / 21600 = 06:00:00
07:59:00 / 21600 = 06:00:00
23:20:00 / 21600 = 18:00:00
10:30:00 / 14400 = 08:00:00
07:59:00 / 14400 = 04:00:00
23:20:00 / 14400 = 20:00:00
10:30:00 / 3600 = 10:00:00
07:59:00 / 3600 = 07:00:00
23:20:00 / 3600 = 23:00:00
10:30:00 / 1800 = 10:30:00
07:59:00 / 1800 = 07:30:00
23:20:00 / 1800 = 23:00:00

关于php - 计算时间粒度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253427/

相关文章:

c# - WCF 和日期时间解析?

sql - 如何使用 SQL Server 更新日期而不更改时间?

javascript - 如何使用 ChromePhp Logger 记录数组

PHP如何禁用子类中的特征?

php - 交响乐 1.4 : Programmatically set environment for CLI

javascript - 为什么当我用另一个 Date 对象构造一个 JavaScript Date 对象时,生成的 Date 对象的 ms 部分被剥离了?

带有时区偏移量而不是 Z 值的 MySQL ISO 8601 日期

java - 网络服务器打不开php文件

php - 将嵌套 sql SELECT 语句中的 SELECT 结果分配给变量 - PHP

vb.net - 在 VB 中编写我自己的 IsDate 函数