19

我有一个代码,我必须“四舍五入”到最低分钟。

  • 16:05:00应该成为16:05:00
  • 16:05:01应该成为16:05:00
  • 16:05:29应该成为16:05:00
  • 16:05:30应该成为16:05:00
  • 16:05:31应该成为16:05:00
  • 16:05:59应该成为16:05:00

我想使用 DateTime 对象。没有以下功能:

  • setHours()
  • setMinutes()
  • setSeconds()

这是我的代码的开头:

$my_date=DateTime::createFromFormat(
    'Y-m-d H:i:s',
    $bd_date
);  
$my_date->setTimezone(self::$TimeZone);

现在我想将“秒”部分设置为零。

您是否有一种优雅的方式来按照我想要的方式设置分钟?

注意:我不是在寻找诸如“将 getTime() 除以 60,转换为整数,然后乘以 60”之类的解决方案。我正在寻找一个通用的解决方案来设置秒,而不仅仅是“0”。

4

5 回答 5

41

setTime优雅吗?

$my_date->setTime ( $my_date->format("H"), $my_date->format("i"), $new_second_val );
$my_date->setTime ( $my_date->format("H"), $new_minute_val, $new_second_val );
// etc...
于 2012-06-27T10:17:42.093 回答
10

只需将秒数设置为“00”

date_default_timezone_set('America/Sao_paulo');
$date = new DateTime();
echo $date->format('Y-m-d H:i:00');
于 2012-06-27T10:19:12.530 回答
3

通过简单地使用 Carbon DateTime 对象上的秒/分钟或小时函数来设置秒/分钟或小时的最佳方法。(显然你需要创建碳对象)

\Carbon\Carbon::now()->hour(2)->minute(20)->second(0);
于 2019-04-03T06:32:02.103 回答
0

我知道这是一个迟到的答案,但它可能会以帮助我的方式帮助某人。

如果需要特定时区,可以添加第一行

date_default_timezone_set('Africa/Johannesburg'); $created = date('Y-m-d H:i:00', time());

于 2019-02-27T19:01:57.117 回答
0

从文档应该是

$dt = Carbon::create(2012, 1, 31, 15, 32, 45);
echo $dt->startOfMinute(); // 2012-01-31 15:32:00
于 2020-01-10T23:40:22.350 回答