2012-08-14 2 views
3

좋아요, 이것은 이상한 질문입니다. 내 수정 중 하나에서 PHP 코드는 time()을 사용하여 데이터베이스에 타임 스탬프를 저장합니다. 내가 아는 한 UTC 시간대를 사용합니다. 이제이 데이터를 가져 와서 일부 자바 스크립트 함수에서 매개 변수로 사용합니다. 이 기능은 30 "초 전"또는 "2 시간 30 분 전"비슷한 시간 문자열, 등 등 여기에 완전한 기능의 반환PHP에서 JavaScript로 데이터를 전송할 때 시간대 오프셋을 계산하십시오.

time_string : function(seconds,complexity,seconds_left,suffix,prefix){ 
    var difference = Math.abs(dynamo.time - seconds); 
    seconds_left = seconds_left == null ? 0 : seconds_left; 
    seconds = +seconds; 
    if(difference < 15 && !seconds_left){ 
     return "Just now"; 
    } 
    suffix = suffix != null 
     ? (seconds_left == 1 
      ? "" 
      : suffix) 
     : (seconds_left == 1 
      ? "" 
      : " ago"); 
    prefix = prefix != null ? prefix : ""; 
    if(difference > 86400){ 
     return new Date(seconds * 1000).toDateString(); 
    } else { 
     var years = Math.floor(difference/31536000); 
     var days = Math.floor((difference/86400) % 365); 
     var hours = Math.floor((difference/3600) % 24); 
     var minutes = Math.floor((difference/60) % 60); 
     var second = difference % 60; 
     var time_str = []; 
     if(years > 0) time_str[time_str.length] = dynamo.toolbox.format_number(years) + " year" + (years == 1 ? '' : 's'); 
     if(days > 0) time_str[time_str.length] = days + " day" + (days == 1 ? '' : 's'); 
     if(hours > 0) time_str[time_str.length] = hours + " hour" + (hours == 1 ? '' : 's'); 
     if(days <= 1){ 
      if(minutes > 0) time_str[time_str.length] = minutes + " minute" + (minutes == 1 ? '' : 's'); 
      if(second > 0 && !minutes && !hours && !days){ 
       time_str[time_str.length] = second + " second" + (second == 1 ? '' : 's'); 
      } 
     } 
     complexity = complexity != null ? complexity : 2; 
     time_str = time_str.slice(0,complexity); 
     if(time_str.length > 1){ 
      var final_str = time_str[time_str.length-1]; 
      time_str.pop(); 
      time_str = time_str.join(", ") + " and " + final_str; 
     } else { 
      time_str = time_str.join(""); 
     } 
    } 
    return prefix + time_str + suffix; 
} 

코드에서를 dynamo.time 사용됩니다. dynamo.time은 PHP의 현재 time()으로 설정되어 있습니다 (저장 시간과 현재 시간 사이의 시간차를 계산하는 데 사용함).

그러나 클라이언트의 시간대 차이를 고려하여 difference 변수를 조정해야합니다 (이전과 같이 UTC라고 생각합니다).

어떻게해야합니까? http://jsfiddle.net/Jskjv/1/

편집 : :. 나는()에, getTimezoneOffset 새로운 날짜 엉망 할 수있을 것입니다()이 달성 경우

당신은 여기 JS 바이올린이 기능에 대한 몇 가지 테스트와 함께, 그것은 줄까? DST와의 불일치가있을뿐입니다.

답변

0

혼란이 어디에서 비롯되었는지 확실하지 않습니다.

Math.round(new Date().getTime()/1000) 

또한 유닉스 타임 스탬프 같은 종류의 반환, 그래서 시간대 오프셋의 합병증이 없다 : 방문자의 시스템 클럭을 가정하는 것은 충분합니다, 당신은이에 대해 어떤 타임 스탬프를 비교할 수 있습니다.

사용자 시스템 시계가 너무 엉망 일 가능성이 있습니다. 이 경우 PHP의 time()이 인라인 JavaScript를 통해 전달되는 시간 오프셋 계산을 수행 할 수 있습니다. 다시 말하지만, 시간대 없음 :

관련 문제