【问题标题】:Modify datetime to last 15 minutes将日期时间修改为持续 15 分钟
【发布时间】:2014-12-07 20:29:13
【问题描述】:

我有日期时间:

2014-08-05 13:27:00
2014-08-05 13:29:00 
2014-08-05 13:36:00 
2014-08-05 13:38:00

如何使用DateTime::modify() 修改此设置

2014-08-05 13:15:00
2014-08-05 13:15:00 
2014-08-05 13:30:00 
2014-08-05 13:30:00

(所以,在最后 15 分钟标记..)

【问题讨论】:

标签: php datetime


【解决方案1】:

这样就可以了...

$adt = date("Y-m-d G:i:s",strtotime("2014-08-05 13:37:00")); // your desired time 
$min = date("i",strtotime("2014-08-05 13:37:00")); // taking the min out
// echo $adt;

if($min<15) $min =00; //changing the min value
elseif(15<$min && $min<30) $min =15;
elseif(30<$min && $min<45) $min =30;
elseif(45<$min && $min<=59) $min =45;

echo date("Y-m-d G:",strtotime($adt)).$min.date(":s",strtotime($adt)); //print or store it in a var

如果使用更多的时间值,也可以作为一个函数......

【讨论】:

  • 您需要 elseif(45&lt;$min &amp;&amp; $min&lt;=59) 作为最后一个 elseif 语句,否则 2014-08-05 13:59:33 之类的日期将无法正确舍入。
  • 我听不懂你说最后的 elseif 是不需要的??
  • 你的最后一个 elseif 检查分钟是否大于 45 小于 59。如果分钟是 59,它不会被此规则捕获,因此您可以将其更改为大于 45,并且小于或等于 59 即 (45 &lt; $min &amp;&amp; $min &lt;= 59) 或者你可以做大于 45 (45 &lt; $min),因为一小时内的分钟数可能不会很快改变
【解决方案2】:

如您要求它使用DateTime::modify(),您可以这样做:

function roundToLastQuarterHour($date_string) {
    $date = new DateTime($date_string);

    // Remove any seconds, we don't need them
    $seconds = $date->format('s');
    $date->modify('-' . $seconds . ' seconds');

    // Store the original number of minutes on the datetime
    $original_minutes = $date->format('i');
    // Calculate how many minutes past the last quarter hour
    $remaining_minutes = $original_minutes - ($original_minutes - ($original_minutes % 15));

    // Modify the minutes, remove the number of minutes past the last quarter of an hour
    $date->modify('-' . $remaining_minutes . ' minutes');

    return $date;
}

roundToLastQuarterHour('2014-08-05 13:27:00')
// 2014-08-05 13:15:00
roundToLastQuarterHour('2014-08-05 13:29:00')
// 2014-08-05 13:15:00
roundToLastQuarterHour('2014-08-05 13:36:00')
// 2014-08-05 13:30:00
roundToLastQuarterHour('2014-08-05 13:38:00')
// 2014-08-05 13:30:00

【讨论】:

    【解决方案3】:

    只需计算您需要减去多少分钟,以获得您想要的结果:

    $dt = new DateTime('2014-08-05 13:27:00');
    $min = $dt->format('i') % 15;
    $dt->modify("-$min minutes");
    echo $dt->format('Y-m-d H:i:s');
    

    demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-23
      • 2013-01-28
      • 2013-10-17
      • 2011-04-19
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多