2017-06-02 38 views
0

請幫助。我正在製作一個在特定日期和時間首次亮相的網站。教程正在每個教師的日期上顯示給每個學生。不過,我希望這些教程不僅可以在每個教程中設置的日期和時間進行初次亮相,還可以基於每個教程中設置的時區。例如,如果教程將於美國東部標準時間(東部標準時間)的美國東部標準時間(美國東部標準時間)晚上8點正式亮相,那麼它應該在當時首次亮相,而不是在應用程序設置的時區開始亮相。根據教程日期和Laravel中的指定時區顯示教程

我寫了下面的代碼使用Laravel收集過濾器()似乎做的伎倆。但是,該頁面加載時間較長,我無法使用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。

感謝

+0

我實在無法理解你的語言,但似乎我可以幫你,我給你2建議作爲答案 –

+0

@ SID-心臟,怎麼能我整合,以便檢查每個教程中設置的時區?現在,它只是比較今天的日期和已發佈的日期。我們想要做的是檢查Carbon :: now()是否等於published_at時間和時區。 –

回答

0

嘗試使用數據表可以從數據庫API 過濾數據,這裏是包 yajra/laravel-數據表甲骨文 ,如果你想公佈嘗試不同的東西這樣 添加使用作爲published_at列

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

如何整合時區,以便該方法還可以檢查每個教程中設置的時區?現在,它只是比較今天的日期和已發佈的日期。我們想要做的是根據時間和時區來檢查publish_at是否大於Carbon :: now()。 –

+0

其工作自動碳類與處理此 –

+0

每個教程的時區字段是與published_at日期字段不同。這就是我問的原因。 –