좋아요, 이것은 이상한 질문입니다. 내 수정 중 하나에서 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와의 불일치가있을뿐입니다.