如何在拉拉维尔中以不同的方式比较日期和时间

How to compare date and time differently in laravel

本文关键字:方式 比较 日期 时间      更新时间:2023-09-26

我正在使用 laravel 从客户端获取日期和时间。如何将给定的日期和时间与数据库进行比较,并将结果返回给客户?

例如,如果我从客户那里获取日期和时间,并且我想向他显示与他的日期和时间不冲突的行。

实际上,

您可以在数据库查询中执行所有这些操作:

$date = '2015-03-11 06:29:56';
$alreadyBooked = DB::table('bookings')
                   ->whereRaw('ABS(TIMESTAMPDIFF(MINUTE, datetime, ?)) <= 120', [$date])
                   ->exists();
if($alreadyBooked){
    // show error
}

解释

?$date 的占位符。这些称为绑定,主要用于获取干净的查询并防止SQL注入。

TIMESTAMPDIFF(MINUTE, ...将返回输入日期时间和存储在数据库字段中的时间(以分钟为单位)的差值。如果该值小于或等于 120(2 小时 = 120 分钟),则与条件匹配。

ABS将使值"无符号"。 -60变得60

在Laravel中,您可以使用Carbon来比较日期/时间

$start = new Carbon'Carbon('2014-01-05 12:00:00');
$end = new Carbon'Carbon('2014-01-01 12:00:00');
echo $end->diffInDays($start);

或者您可以直接从数据库比较日期

$customer =App'Customer::first();
$start = $customer->db_date_column;
$end = new Carbon'Carbon('2014-01-01 12:00:00');
echo $end->diffInDays($start);

更多信息 http://carbon.nesbot.com/docs/#api-difference

更新 如果您希望时间差异以小时为单位,则可以改用此$end-diffInHours($start);

可以使用此示例:

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days');

在拉拉维尔只是不要忘记添加这个:

use DateTime;

另一种选择是您可以使用SQL,请查看我的示例:

      return DB::table('corporation')->join('corporation_subscription','corporation.id','=','corporation_subscription.corp_id')
        ->where('corporation.id','=',$id)
        ->where('corporation_subscription.period','>=',DB::raw('DATEDIFF(NOW(),corporation_subscription.created_at)'))
        ->where('corporation_subscription.status','!=', 'cancel' )
        ->get();

这也将帮助您:DB::raw('DATEDIFF(NOW(),corporation_subscription.created_at)'))