>  Q&A  >  본문

Laravel 결과를 사용자에게 반환할 때 시간대가 잘못 표시됩니다.

<p>Laravel API가 있고 애플리케이션의 시간대가 UTC로 설정되어 있습니다. MySQL의 시간대는 SYSTEM으로 설정되어 있으며 UTC로도 표시됩니다. 또한 사용자 테이블에는 사용자의 시간대 정보를 저장하는 열이 있습니다. <br /><br />내 프런트 엔드 인터페이스에는 사용자가 특정 프로세스의 시간으로 날짜/시간을 입력할 수 있는 필드가 있으며, 이 시간은 사용자의 시간에 API로 전송됩니다. 존. 그래서 해당 레코드가 저장되면 이를 UTC로 변환한 다음 다음과 같이 데이터베이스에 삽입합니다. <pre class="brush:php;toolbar:false;">auth()->user()->procedure()->create([ 'procedure_time' => Carbon::parse($request->procedure_time, auth()->user()->timezone)->setTimezone('UTC'), ]); </pre> <p>현재 사용자의 시간대에서 당일의 모든 사용자 프로세스 기록을 가져오고 해당 결과를 프런트엔드에 반환하려고 합니다. 결과가 맞는 줄 알았는데, 컴퓨터가 자정이 되어도 10시간 정도는 여전히 전날의 기록으로 결과가 나와 있었습니다. 이것이 제가 이러한 결과를 반환하려고 하는 방법입니다.</p> <pre class="brush:php;toolbar:false;">$todayProcedures = 프로시저::query() ->where('user_id', $user->id) ->whereDate('procedure_time', '>=', Carbon::now()->startOfDay()->tz($user->timezone)) ->whereDate('procedure_time', '<=', Carbon::now()->endOfDay()->tz($user->timezone)) ->get(); </pre> <p>제가 어디에서 잘못되었는지 알 수 없습니다. </p>
P粉536909186P粉536909186471일 전538

모든 응답(1)나는 대답할 것이다

  • P粉006977956

    P粉0069779562023-07-28 09:50:53

    whereBetween 메소드를 사용하고 하루의 시작과 끝을 사용자의 시간대를 사용하여 변환했습니다. 이렇게 하면 사용자의 현지 시간을 기준으로 데이터베이스를 쿼리하고 올바른 결과를 얻을 수 있습니다.

    으아악

    애플리케이션에서 타임스탬프를 처리할 때 시간대 변환을 올바르게 처리하는 것이 중요합니다. 일관성과 정확성을 보장하려면 다음 지침을 따르십시오.

    1. 데이터베이스 저장소: 항상 UTC 형식을 사용하여 데이터베이스에 타임스탬프를 저장합니다. 이렇게 하면 특정 시간대와 관계없이 모든 타임스탬프가 표준화됩니다.
    2. 쿼리 시간대 변환: 레코드를 삽입하거나 업데이트할 때가 아닌 데이터베이스를 쿼리할 때 시간대 변환이 수행됩니다. 이렇게 하면 사용자의 시간대에 관계없이 데이터베이스에서 검색된 데이터가 일관되고 정확하다는 것을 확인할 수 있습니다.
    3. 사용자 시간대 기반 표시: 사용자에게 타임스탬프를 표시하거나 시간대 기본 설정에 따라 처리할 때 필요한 변환을 수행합니다. 타임스탬프를 사용자의 시간대에 맞게 조정하면 보다 사용자 친화적이고 현지화된 경험을 제공할 수 있습니다.
    다음 지침을 따르면 애플리케이션이 정확한 타임스탬프 데이터를 유지하고 다양한 시간대에 걸쳐 일관된 결과를 제공합니다.


    회신하다
    0
  • 취소회신하다