错误地将小时数添加到 MySQL 表列时间戳 Laravel

Posted

技术标签:

【中文标题】错误地将小时数添加到 MySQL 表列时间戳 Laravel【英文标题】:Wrong addition of hours to a MySQL table column timestamp Laravel 【发布时间】:2019-10-25 11:36:33 【问题描述】:

我需要获取 3 种类型的记录才能向这些记录发送提醒,首先我需要在创建记录的 24 小时后发送提醒,然后在 48 小时后,最后在 72 小时后发送提醒。

到目前为止,我已经这样做了,但它似乎无法正常工作,因为假设当当前日期变为 2019-07-10 00:01:00 时在 2019-06-10 19:00:00 创建了一条记录,它似乎认为好像已经过去了 24 小时:

$fecha_hoy = Carbon::now();
$solicitudes_24 = SolicitudUser::whereDate(DB::raw('DATE_ADD(created_at, INTERVAL 24 HOUR)'), '<', $fecha_hoy)
                        ->whereDate(DB::raw('DATE_ADD(created_at, INTERVAL 48 HOUR)'), '>', $fecha_hoy)
                        ->whereNull('recordatorio_estado')
                        ->whereHas('curso', function($query)
                            $query->whereHas('operativo', function ($q)
                                $q->whereDate('dateOfertaAcademicaOperativoFechaRegistroFin', '>', Carbon::now());
                            );
                        )
                        ->where(function($query)
                            $query->where('registro_completo', 0)
                                ->orWhereNull('registro_completo');
                        )
                        ->get();

$solicitudes_48 = SolicitudUser::whereDate(DB::raw('DATE_ADD(tblusersSolicitudes.created_at, INTERVAL 48 HOUR)'), '<', $fecha_hoy)
                        ->whereDate(DB::raw('DATE_ADD(tblusersSolicitudes.created_at, INTERVAL 72 HOUR)'), '>', $fecha_hoy)
                        ->where(function($query)
                            $query->where('recordatorio_estado', 1)
                                    ->orWhereNull('recordatorio_estado');
                        )
                        ->whereHas('curso', function($query)
                            $query->whereHas('operativo', function ($q)
                                $q->whereDate('dateOfertaAcademicaOperativoFechaRegistroFin', '>', Carbon::now());
                            );
                        )
                        ->where(function($query)
                            $query->where('registro_completo', 0)
                                ->orWhereNull('registro_completo');
                        )
                        ->get();

$solicitudes_72 = SolicitudUser::whereDate(DB::raw('DATE_ADD(tblusersSolicitudes.created_at, INTERVAL 72 HOUR)'), '<', $fecha_hoy)
                        ->where(function($query)
                            $query->where('recordatorio_estado', 2)
                                    ->orWhereNull('recordatorio_estado');
                        )
                        ->whereHas('curso', function($query)
                            $query->whereHas('operativo', function ($q)
                                $q->whereDate('dateOfertaAcademicaOperativoFechaRegistroFin', '>', Carbon::now());
                            );
                        )
                        ->where(function($query)
                            $query->where('registro_completo', 0)
                                ->orWhereNull('registro_completo');
                        )
                        ->get();

我该如何解决这个问题?

警察局。您可以忽略不涉及日期的其余查询链。

【问题讨论】:

【参考方案1】:

可能是因为您使用了 whereDate。 whereDate 方法可用于将列的值与日期进行比较。 参考:https://laravel.com/docs/5.8/queries -> whereDate。 我认为你应该只使用 where 而不是 whereDate。这会给你当前的输出。

【讨论】:

以上是关于错误地将小时数添加到 MySQL 表列时间戳 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

如何将 C# DateTime 转换为 MySQL 时间戳表列

如何在 PHP/MySQL 中增加 4 小时的时间

将五个小时添加到时间戳字段

Google Apps 脚本 - 将 n 小时添加到当前时间和日期

将时间戳值转换为 Kotlin 中的 12/24 小时时间值

将时间从一个时间戳字段添加到另一个字段