복붙노트

[RUBY-ON-RAILS] 사용자의 시간대의 시간을 표시하는 방법

RUBY-ON-RAILS

사용자의 시간대의 시간을 표시하는 방법

나는 레일 3.0.5를 사용하고 난 created_at과 UTC에 저장 updated_at 있습니다. 지금은 사용자의 시간대에 created_at 시간을 표시합니다. 나는 브라우저에서 사용자의 시간대를 선택하고 사용자의 시간대로 시간을 변환 할 수 믿습니다.

나는 확실히 레일이 같은 돌봐 플러그인 / 보석을 것입니다. 거기 뭐 있니?

해결법

  1. ==============================

    1.기본적으로 레일은 데이터베이스에 값을 저장하기 전에 UTC에 모든 날짜를 변환합니다. 에 관계없이 서버 시간대, 당신은 항상 당신의 데이터베이스에 UTC 날짜가,이 수단.

    기본적으로 레일은 데이터베이스에 값을 저장하기 전에 UTC에 모든 날짜를 변환합니다. 에 관계없이 서버 시간대, 당신은 항상 당신의 데이터베이스에 UTC 날짜가,이 수단.

    사용자의 시간대로 날짜를 변환하기 위해 당신은 기본적으로 두 가지 가능성이있다 :

    귀하의 사이트가 등록을 허용하는 경우, 당신은 사용자 환경 설정 등 사용자의 시간대를 저장할 수 있습니다. 사용자 테이블에서 사용자의 시간대를 저장합니다. 그런 다음 in_time_zone 방법을 사용하여 적절한 시간대에 어떤 날짜 / 시간 형식을 사용할 수있는 도우미 사용자 정의를 작성합니다.

    > t = Time.current
    # => Mon, 23 Dec 2013 18:25:55 UTC +00:00 
    > t.zone
    # => "UTC" 
    > t.in_time_zone("CET")
    # => Mon, 23 Dec 2013 19:25:55 CET +01:00 
    

    외모가 같은 수 있습니다 귀하의 도우미

    def format_time(time, timezone)
      time.in_time_zone(timezone)
    end
    

    일반적으로도 출력 표준 형식의 I18n.l 도우미를 사용하는 등의 I

    def format_time(time, timezone)
      I18n.l time.to_time.in_time_zone(timezone), format: :long
    end
    

    귀하의 사이트가 더 등록이 없거나 당신이 그들의 시간대에 대한 사용자 요청하지 않거나 단순히 사용자 시스템의 시간대를 사용하려면, 당신은 자바 스크립트를 사용할 수 있습니다.

    나의 제안은 당신이 값을 변환하는 일반적인 자바 스크립트 함수를 만들 수 있도록 적절한 방법으로 모든 시간을 인쇄하는 사용자 지정 도우미를 만드는 것입니다.

    def format_time(time, timezone)
      time = time.to_time
      content_tag(:span, I18n.l(time, format: :long), data: { timezone: timezone, time: time.iso8601 })
    end
    

    이제 DOM로드에 수행되는 자바 스크립트 함수를 생성하고 데이터와 시각 속성을 가진 모든 HTML 태그를 선택합니다. 이를 반복하고 업데이트를 지정된 시간대에 적절한 시간 스팬 태그 안에 값.

    간단한의의 jQuery를 예로들 수

    $(function() {
        $("span[data-time]").each(function() {
            // get the value from data-time and format according to data-timezone
            // write the content back into the span tag
        });
    });
    

    간단한 검색을 사용할 자바 스크립트 시간 포맷터이 많이 있기 때문에 나는 여기에 전체 코드를 게시하고 있지 않다. 여기에 몇 가지 가능한 해결 방법입니다

  2. ==============================

    2.https://github.com/basecamp/local_time -베이스 캠프가 클라이언트 측 렌더링을위한 LOCAL_TIME라고하여 좋은 보석이있다. 그것은 사용자가 로그인되지 않은 애플리케이션을위한 좋은 그리고 그것은 친화적 인 캐시입니다.

    https://github.com/basecamp/local_time -베이스 캠프가 클라이언트 측 렌더링을위한 LOCAL_TIME라고하여 좋은 보석이있다. 그것은 사용자가 로그인되지 않은 애플리케이션을위한 좋은 그리고 그것은 친화적 인 캐시입니다.

  3. ==============================

    3.당신은 사용자의 시간대에 모든 시간을 변환하는 응용 프로그램 컨트롤러에이를 추가 할 수 있습니다 :

    당신은 사용자의 시간대에 모든 시간을 변환하는 응용 프로그램 컨트롤러에이를 추가 할 수 있습니다 :

    class ApplicationController < ActionController::Base
    
      around_filter :user_time_zone, :if => :current_user
      def user_time_zone(&block)
        Time.use_zone(current_user.timezone_name, &block)
      end
    end
    

    당신은 사용자의 시간대를 캡처 할 수있는 단지

  4. ==============================

    4.UTC에 저장 (같은 기본입니다) 즉, started_at하고 있습니다 : 당신이 표시 할 값이 데이터베이스에서오고 있다고 가정.

    UTC에 저장 (같은 기본입니다) 즉, started_at하고 있습니다 : 당신이 표시 할 값이 데이터베이스에서오고 있다고 가정.

    당신이 사용자의 시간대이 경우 당신은 또한 수행하여 시간을 지역화 할 수 오프셋으로 :

    started_at.in_time_zone(-2)
    => Mon, 24 Feb 2014 23:07:56 GST -02:00
    

    다음 원하는 부분을 얻을 수있는 방법은 모든 종류의 munged 할 수있는 :

    started_at.in_time_zone(-2).yesterday
    => Sun, 23 Feb 2014 23:07:56 GST -02:00
    
    started_at.in_time_zone(-2) + 3.days
    => Thu, 27 Feb 2014 23:07:56 GST -02:00
    
  5. ==============================

    5.http://api.rubyonrails.org/classes/Time.html#method-c-use_zone

    http://api.rubyonrails.org/classes/Time.html#method-c-use_zone

    이것은 당신이 찾고있는 것입니다 :

    Time.use_zone(@user.timezone) do
      blah blah blah
    end
    
  6. ==============================

    6.특정 시간대에 날짜를 변환하려는 경우 :

    특정 시간대에 날짜를 변환하려는 경우 :

    deadline.in_time_zone(time_zone)
    

    00, 당신은 단순히 시간대에 시간을 찾기 위해 유니버설 시간 가치에 추가 또는 범용 시간을 얻을 수 있습니다 : 05 - 카라치에서와 같이 또한, 로컬 시스템 시간대 플러스 현지 시간 및 그 구절을 통해 유니버설 시간을 찾을 수 있습니다 현지 시간부터 (우리의 경우 05:00) 시간대 차이의 뺄셈하여 현지 시간에서

  7. ==============================

    7.당신은 벤이 게시 한뿐만 아니라 이러한 링크를 살펴 할 수 있습니다 :

    당신은 벤이 게시 한뿐만 아니라 이러한 링크를 살펴 할 수 있습니다 :

  8. from https://stackoverflow.com/questions/5267170/how-to-display-the-time-in-users-timezone by cc-by-sa and MIT license