【问题标题】:How to compare date and time differently in laravel如何在laravel中以不同方式比较日期和时间
【发布时间】:2015-05-12 20:00:42
【问题描述】:

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

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

【问题讨论】:

  • 您的意思是要检查日期或时间与用户输入匹配的行吗?所以 03/10/2015 12:00:00 将返回日期为 03/10/2015 或时间为 12:00 的任何行?一个例子真的很有帮助
  • 示例:客户给我日期和时间,以便在特定日期和时间预订他的位置(或餐桌)。我想检查给定时间表或地点的前 2 小时和后 2 小时是否已预订?如果之前 2 小时和之后 2 小时如果我发现任何条目,那么我不会让他预订那张桌子

标签: javascript jquery laravel


【解决方案1】:

实际上,您可以在数据库查询中完成所有这些操作:

$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

【讨论】:

  • 我试过你的代码,但它给了我错误:SQLSTATE[HY093]: Invalid parameter number (SQL: select count(*) as aggregate from table_booking_log where TIMESTAMPDIFF(MINUTE, time, -120 ) 介于 120 和 ?)
  • 您能仔细检查一下括号是否正确吗?
  • 我已经复制粘贴了您的代码,只是更改了我的表名。我仍然遇到同样的错误。
  • 什么“?”在您的查询中表示。实际上我没有得到你的代码。你能告诉我你的代码的含义吗?
  • 我已经更正/改进了查询并添加了解释。看看
【解决方案2】:

在 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);

或者你可以直接从db中比较日期

$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);

【讨论】:

  • mininoz 我将如何将动态值发送到新的 Carbon\Carbon('2014-01-05 12:00:00');功能?我想将来自客户的值存储在变量中,然后将其发送给 Carbon。帮助
  • @ParagBhingre 如果我理解正确,用户将提交一个包含请求预订日期的表格。因此,您可以从中获取日期。但在将其发送到函数之前不要忘记正确的日期格式。
  • 我想要那个特定日期的时差。
  • @ParagBhingre 您从哪里获得特定日期?
  • 我正在从客户那里获取日期和时间。我只需要检查该日期和时间是否有任何条目在数据库中可用
【解决方案3】:

您可以使用此示例:

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

在 Laravel 中别忘了添加这个:

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)'))

【讨论】:

  • 其实我想要的主要是时差。
  • 那么问题出在哪里?
  • echo $interval->format('%R%a days');在这里你能告诉我显示时间差异的格式。%a 显示天数差异。
猜你喜欢
  • 2017-04-21
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多