我试图寻找这个,但我找不到这个我想做的好例子。
我在MySQL数据库中获得了日期时间值,当该值正在使用时,必须向下舍入。
示例,所有这些值:
2013-04-20 07:14:42
2013-04-20 07:19:51
2013-04-20 07:37:26
2013-04-20 07:46:28
2013-04-20 07:59:44
应该向下舍入到:
2013-04-20 07:00:00
并且
2013-04-20 16:25:34
应该是:
2013-04-20 16:00:00等...
获取日期值的PHP代码:
$d = strtotime($row["date"]);
那么,如何才能将日期时间值向下舍入?
答案 0 :(得分:23)
试试这个,
$date = "2013-04-20 16:25:34";
echo date("Y-m-d H:00:00",strtotime($date));
<强> CodePad Demo. 强>
答案 1 :(得分:17)
如果你正在使用PHP的Carbon DateTime库(你真的应该 - https://github.com/briannesbitt/Carbon)
您可以使用
轻松实现 Carbon::now()->minute(0)->second(0);
答案 2 :(得分:4)
由于你已经有了一个Unix时间戳$d
,最有效的方法是只使用算术而不是日期函数 - 特别是如果你要循环遍历结果集。
$hourTimestamp = $d - ($d % 3600);
Modulo运算符为您提供从时间戳中减去的余数,以获得小时时间戳。
答案 3 :(得分:2)
在这种情况下,一个简单的substr
可以做到:
echo substr($date, 0, 13) . ":00:00";
答案 4 :(得分:2)
strtotime()
为您提供一个Unix时间戳,它是自1970-01-01 00:00:00以来的秒数。
如果仅除以3600秒(相当于1小时的秒数)并忽略余数(您想要的分钟和秒数),该怎么办?
$d = strtotime($row["date"]);
$rounded_d = intval($d / 3600);
$formatted_rounded_d = date('Y-m-d H:i:s', $rounded_d)
答案 5 :(得分:1)
date
和strtotime
函数功能实现此目的,只需更改您的分钟和第二次调整
$date = '2013-04-20 07:14:42';
$newdate = date('Y-m-d H:00:00', strtotime($date));
echo $newdate;
这将输出
2013-04-20 07:00:00
答案 6 :(得分:1)
通过直接输出00:00
作为分钟和秒而不是写i:s
,将日期写入字符串:
$date = date("Y-m-d H:00:00", $d);
或者你需要它作为unix时间戳吗?然后关闭分钟和秒(总是最后5个字节)并用00:00
替换它们。
$d = strtotime(substr($row["date"], 0, -5)."00:00"));
答案 7 :(得分:1)
对于那些关注的人(很久以后!):Carbon有一个简单的方法来做到这一点
$date = (new Carbon($row['date']))->minute(0)->second(0)->getTimestamp();
答案 8 :(得分:0)
我会在类似这样的函数中使用DateTime的setTime()
方法。
<?php
/**
* @param \DateTime $dateTime
*
* @return \DateTime
*/
function roundDownToHour(\DateTime $dateTime)
{
$dt = $dateTime; // clone
return $dt->setTime(
$dateTime->format("H"),
0,
0
);
}
$testDate = date("Y-m-d H:i:s", mktime(9, 59, 59, 1, 30, 2019));
$roundedDownToHour = roundDownToHour(new \DateTime($testDate));
var_dump($testDate); //=> 2019-01-30 9:59:59
var_dump($roundedDownToHour->format("Y-m-d H:i:s")); //=> 2019-01-30 09:00:00
结果如下。
// the results
string(19) "2019-01-30 09:59:59"
string(19) "2019-01-30 09:00:00"
答案 9 :(得分:-1)
使用内置的PHP函数进行舍入时间很重要,要考虑到日期和时间。例如,四舍五入到最接近的小时数时,2020-10-09 23:37:35
必须变成2020-10-10 00:00:00
。
整点到最近的时间:
$time = '2020-10-09 23:37:35';
$time = date("Y-m-d H:i:s", round(strtotime($time) / 3600) * 3600); // 2020-10-10 00:00:00
$time = '2020-10-09 23:15:35';
$time = date("Y-m-d H:i:s", round(strtotime($time) / 3600) * 3600); // 2020-10-09 23:00:00
时间到最近的20分钟增量:
$time = '2020-10-09 23:15:35';
$time = date("Y-m-d H:i:s", ceil(strtotime($time) / (60*20))*(60*20)); // 2020-10-09 23:20:00
$time = '2020-10-09 23:41:35';
$time = date("Y-m-d H:i:s", ceil(strtotime($time) / (60*20))*(60*20)); // 2020-10-10 00:00:00
如果您需要将向下取整至最近的20分钟增量,请将ceil
更改为floor
,例如
$time = date("Y-m-d H:i:s", floor(strtotime($time) / (60*20))*(60*20)); // 2020-10-09 23:40:00
如果您需要将时间四舍五入为分钟,您可以简单地执行以下操作:
$time = date("Y-m-d H:i:s", ceil(strtotime($time) / (60*15))*(60*15)); // 2020-10-09 23:45:00