计算与先前 created_at 时间差的最佳方法 - Laravel
Posted
技术标签:
【中文标题】计算与先前 created_at 时间差的最佳方法 - Laravel【英文标题】:Best way to calculate time difference with the previous created_at - Laravel 【发布时间】:2021-06-28 00:47:20 【问题描述】:我有一个婴儿日志列表,我尝试自动计算之前的时间差,减去喂养间隔。
feedingInterval = 3h
例如
如果我在下午 5 点喂我的宝宝,如果我在晚上 7:50 再喂他一次。 他早了 10 分钟。
超过 3 小时,绿色(+)表示宝宝睡得很好 不到3小时,红色(-)表示宝宝会早吃,不宜太频繁。我有这段代码
if($baby)
$dateTime = new \DateTime();
$date = $dateTime->format('Y-m-d');
if(Request::get('date') != null)
$date = Request::get('date');
$yesterday = date('Y-m-d',strtotime("-1 days"));
$logFromYesterday = BabyLog::where('type', $type)->whereDate('created_at', $yesterday )->orderBy('created_at', 'desc')->where('babyId',$baby->id)->get()->first();
$babyLogs = BabyLog::where('type', $type)->whereDate('created_at', '=', $date)->orderBy('created_at', 'desc')->where('babyId',$baby->id)->get();
$logDetail = [];
$lastFeedStatus = 'n/a';
foreach ($babyLogs as $i => $feed)
$id = $babyLogs[$i]->id;
$t1 = $babyLogs[$i]->updated_at;
if($i >= (count($babyLogs)-1))
if($logFromYesterday)
$t2 = $logFromYesterday->updated_at;
else
$t2 = $date.' 00:00:00';
else
$t2 = $babyLogs[$i+1]->updated_at;
// dd($t1,$t2);//
$diffTime = abs(strtotime($t1) - strtotime($t2));
$diffTime = $diffTime / ( 60 * 60 );
if($type == 'feed')
$diffTime = $diffTime - $baby->feedingInterval;
$diffTime = round($diffTime,2);
$diffTime = $diffTime*60;
$logDetailStatus = ($diffTime>0) ? "+" : "-";
$diffTime = $logDetailStatus.str_replace('-', '', $diffTime). "m ";
else
$diffTime = round($diffTime,2);
$diffTime = $diffTime*60;
$diffTime = str_replace('0', '',date('H\h', mktime(0,$diffTime))) . '';
$logDetail[$i]['id'] = $id;
$logDetail[$i]['msg'] = $diffTime;
if($i == 0)
$lastFeedStatus = $diffTime;
return $logDetail;
我只想四舍五入到分钟。
例如。 10.2 米 --> 10 米
我试过了
round($diffTime,2);
到
round($diffTime,1);
我明白了
例如。 10.2 米 --> 12 米
【问题讨论】:
您有什么理由不使用 Carbon 吗? Carbon 使这些类型的计算变得容易得多。 @Praveesh 如果可以通过 php 实现,我更愿意这样做,Carbon 不会增加页面加载的权重吗? Carbon 在 Laravel 加载时加载(Illuminate\Support\Carbon
),Laravel 在内部使用它进行日期操作。所以如果你在这里也使用它不会对性能产生太大影响。
如果你真的想使用 php,那么 dateTime() 或 strtotime() 是你的选择。
看到这个答案***.com/a/3923228/8607640
【参考方案1】:
尝试使用 number_format():
<?php
echo number_format("100.1234");
echo number_format("100.50");
echo number_format("100.890");
?>
结果将是:
100
101
101
【讨论】:
以上是关于计算与先前 created_at 时间差的最佳方法 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章
在 UINavigationController 堆栈中更新先前视图控制器中的数据的最佳方法
如何在 Hive 中记录 created_at 和 updated_at 时间戳?
在 Android 手机中计算与 GPS 距离的最佳方法是啥?