2010-06-25 4 views
6

어떻게 날짜를 조작하여 "지금 막"으로 표시 할 수 있습니까? "5 분 전"... "3 시간 전"... "2010 년 6 월 22 일 1:45 pm"과 비슷한 방식으로 어떻게 각 질문에 대한 답변/코멘트 옆에 날짜가 표시됩니까?크로스 - 브라우저 간 상대 날짜를 표시하는 방법은 무엇입니까?

문제가 더 복잡해지기 때문에 데이터베이스에 저장된 날짜는 GMT 시간 (괜찮습니다)이지만 각 사용자의 브라우저 시간대에 나타나기를 원합니다.

나는 이미 John Resig의 예쁜 날짜 플러그인 인 http://bassistance.de/jquery-plugins/jquery-plugin-prettydate/을 시험해 보았고 데이터베이스의 GMT 시간에서 오프셋 된 시간대를 뺄 수 있도록 편집했습니다. 그러나이 솔루션은 FireFox에서만 작동합니다.

는 여기 오프셋 시간대를 추가 한 후 'prettydate'기능이다 :

format : function(time) { 
var date = new Date(time); 
var currentDate = new Date(); 
var timezoneOffsetInMilliseconds = currentDate.getTimezoneOffset() * 60000; 
var currentTimeInMillisecondsUtc = currentDate.getTime(); 
var givenTimeInMillisecondsUtc = date.getTime()- timezoneOffsetInMilliseconds; 
var diffInSeconds = ((currentTimeInMillisecondsUtc - givenTimeInMillisecondsUtc)/1000); 
var day_diff = Math.floor(diffInSeconds/86400); 

if (isNaN(day_diff) || day_diff < 0) 
    return; 

     // If longer than a month, calculate the date w/ timezone offset 
     if (day_diff >= 31) 
      return new Date(givenTimeInMillisecondsUtc).toLocaleString(); 

     var messages = $.prettyDate.messages; 
     return day_diff == 0 && (diffInSeconds < 60 && messages.now 
      || diffInSeconds < 120 && messages.minute 
      || diffInSeconds < 3600 
      && messages.minutes(Math.floor(diffInSeconds/60)) 
      || diffInSeconds < 7200 && messages.hour || diffInSeconds < 86400 
      && messages.hours(Math.floor(diffInSeconds/3600))) 
      || day_diff == 1 && messages.yesterday || day_diff < 7 
      && messages.days(day_diff) || day_diff < 31 
      && messages.weeks(Math.ceil(day_diff/7)); 
    } 

편집 : 나는 (구글 웹 애플리케이션을 통해) 장고 템플릿을 사용하여 파이썬을 사용하고 , 그리고 '시간'개체 I 그래서 같은 ISO 형식 ') db.DateTimeProperty ('A 전달 해요 '

<span class="prettyDate" title='{{ q.date.isoformat }}'>{{q.date.isoformat}}</span> 
+0

일상적으로 날짜를 사용한 사람의 질문 : setUTC *() 메서드를 사용하여 날짜를 설정할 수 없습니까? 자동으로 현지 시간으로 변환되지 않습니까? – brainjam

+0

고마워, 그 일을 시도 할 수있어. 그러나 여전히 크로스 브라우저 부분에는 도움이되지 않습니다. 실제로는 더 큰 문제입니다. – Cuga

답변

2

이유는이 서버 측을하지, 함께 내장 템플릿 태그 timesince 또는 사용자 정의 템플릿 태그?

상대 시간에는 다른 시간대가 같은 영역에있는만큼 시간대에는 의미가 없습니다. 과거의 결과가 더 멀리 있고 절대 시간으로 발표하고 싶다면 시간 이동을 직접해야합니다. 이를 위해서는 ask the user for her timezone (or use some JS on a previous page to send it to you)을 입력하고 사용자 프로필에 저장해야합니다.

이것은 또한 in the mailing list으로 논의됩니다.

+0

대부분 사용자의 브라우저의 시간대 설정에 시간이 표시되기를 원하기 때문입니다. 위의 플러그인은 자동으로 날짜를 10 초마다 업데이트하므로 사용자가 브라우저를 열어두면 업데이트 된 텍스트가 표시됩니다. – Cuga

+0

서버 측 옵션에서 올바른 영역으로 이동하는 방법에 대해 조금 편집했습니다. –

+0

흠 이전에는 사이트를 볼 계정을 갖고 있지 않은 공개 사용자 때문에 자신의 시간대를 물어보고 싶지 않았습니다. 이전 페이지에서 JS를 통해 표준 시간대를 보내는 링크에 대해 생각해 보겠다. 비록 자동 업데이트를위한 크로스 브라우저 JS 솔루션을 여전히 선호하지만. – Cuga

관련 문제