根据教程日期显示教程,并在Laravel中指定的时区



请帮助。我在特定日期和时间首次亮相的网站上工作。每个教程设置的日期,向每个学生展示教程。但是,我希望这些教程不仅在每个教程上设置的日期和时间之前首次亮相,而且还基于每个教程上的时区设置。例如,如果将一个教程定于今天下午8:00在美国东部标准时间(EST(首次亮相,则该教程应当时首次亮相,而不是在申请Set set timeZone上首次亮相。

我使用Laravel Collection Filter((编写了以下代码,该代码似乎可以解决问题。但是,该页面的加载需要更长的时间,我无法使用Laravel Paginate((。我需要使用laravel paginate((一次减少被拉出的记录数量。有四千多个教程。请帮忙。

// upcoming tutorials
$tutorials = Tutorial::orderBy('id', 'desc)->paginate(20);
$futureTuts = $tutorials->filter(function ($value, $key) {
    $today = new DateTime('now');
    $show_date = new DateTime($value->show_date, new DateTimeZone($value->timezones->name));
    return $show_date > $today;
});
$upcoming_tuts = $futureTuts->all();

请围绕此解决方案,以便能够使用laravel默认的paginate((。我相信使用Laravel分页会导致页面加载更快。我正在使用Laravel 5.4。

谢谢

尝试使用DataTable可以从数据库中过滤您的数据为API这是软件包yajra/laravel-datables-Oracle如果您想用作发布的话,请尝试以下不同添加一列作为已发布的

添加
  $table->dateTime('published_at');

比您的模型定义表

 protected $dates = ['published_at'];
    public function setPublishedAtAttribute($date){
        $this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d', $date);
    }
    public function scopePublished($query)
    {
        $query->where('published_at', '<=', Carbon::now());
    }
    public function scopeUnpublished($query)
    {
        $query->where('published_at', '>', Carbon::now());
    }
    public function getCreatedAtAttribute($date)
    {
        return $this->asDateTime($date)->toFormattedDateString();
    }

现在您可以在控制器中使用此范围

$tutorials = Tutorial::orderBy('created_at', 'desc')->published()->paginate(5);

相关内容

  • 没有找到相关文章

最新更新