gpt4 book ai didi

php - 最近 15 分钟

转载 作者:行者123 更新时间:2023-11-29 08:40:05 30 4
gpt4 key购买 nike

我的表有一列以 mysql time() 格式格式化。
当它是一个值分配给名为 $preRemainOt
的 php 变量时我想重新安排到最近的 15 分钟

function roundTime($whatTime)
{

echo $whatTime."=>";

$roundTime= round ( strtotime($whatTime) / 60 * 15 );

echo date("H:i:s",$roundTime)."<br>";

return date("H:i:s",$roundTime);
}

$validOt =roundTime($preRemainOt);

<pre>
few bad result given from my try as follow:
$preRemainOt=>$validO
03:43:00=>06:55:45
01:05:00=>06:16:15
02:00:00=>06:30:00
but result shuld be as follow:
$preRemainOt=>$validO
03:43:00=>03:45:00
01:05:00=>01:00:00
02:00:00=>02:00:00


1.请给我一个想法。
2.如果我的剩余ot值($preRemainOt)超过24小时会发生什么ex:$preRemainOt='26:43:00' 这对 php 或 mysql 函数都无关紧要。
存储此类 ot 计算的最佳 mysql 数据类型是什么

更新1
经过一些建议后,我将我的功能分为三个部分

function secondToTime($timeStamp)
{
$hours=intval($timeStamp / 3600);
$mins=intval($timeStamp / 60) % 60;
$secs=$timeStamp % 60;
return sprintf("%d:%02d:%02d",$hours, $mins, $secs);
}

function timeToSecond($time='00:00:00')
{
list($hours, $mins, $secs) = explode(':', $time);
$timeToSecond = ($hours * 3600 ) + ($mins * 60 ) + $secs;

return $timeToSecond;
}

function roundTime($interval='00:00:00')
{
$interval=timeToSecond($interval);
$interval = intval($interval) + 450;
$interval -= $interval % 900;
return secondToTime($interval);
}

因为在将列值分配给 $preRemainOt 变量之前,还有另外几个步骤。我也更改了这两个步骤,

function timeDiff($lastTime,$firstTime)
{
$firstTimetime=timeToSecond($firstTime);
$lastTime=timeToSecond($lastTime);
$timeDiff=$lastTime-$firstTime;

return secondToTime($timeDiff);
}

function timeAdd($firstTime,$lastTime)
{
$firstTimetime=timeToSecond($firstTime);
$lastTime=timeToSecond($lastTime);
$timeAdd=2*$lastTime-$firstTime;;
return secondToTime($timeAdd);
}

所以我认为使用 select UNIX_TIMESTAMP() 很困难。这将改变我的整个剧本。在这种情况下“%d:%02d:%02d”给出废话

最佳答案

试试这个:

function roundTime($whatTime) {
$time = strtotime($whatTime) + 450;
return date("H:i:s", $time - $time % 900);
}

编辑:

实际上,根据您下面的评论,这就是我要做的。如果这是一个时间间隔而不是文字时间点,我会将值存储在数据库中作为整数秒数而不是 DATETIME 类型。因此 30:37:29 将存储为 110249,因为 110249 秒是 30 小时 37 分 29 秒。

然后,您将传递 110249,而不是将“30:37:29”传递给此函数。函数将是:

function roundTime($interval) {
$interval = intval($interval) + 450;
$interval -= $interval % 900;
return sprintf("%d:%02d:%02d",
intval($interval / 3600), // hours
intval($interval / 60) % 60, // minutes
$interval % 60); // seconds
}

如果您已经在数据库中存储了一堆内容,并且绝对无法将其转换为秒而不是 DATETIME,那么在您的查询中,不要查询 DATETIME,而是使用 UNIX_TIMESTAMP 函数以及上面的函数。换句话说,而不是这个:

SELECT id, name, preRemainOt, other_stuff...

这样做:

SELECT id, name, UNIX_TIMESTAMP(preRemainOt) AS preRemainOt, other_stuff...

然后将该列的整数值传递给 roundTime 函数,而不是 DATETIME 的值。

关于php - 最近 15 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066037/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com