표시 날짜/시간에 사용자의 로케일 형식과 시간이 오프셋
-
01-07-2019 - |
문제
서버가 항상 역할 날짜 UTC HTML,그리고 클라이언트에 있는 자바스크립트 사이트는 그것을 변환하는 사용자의 로컬 시간대.
보너스를 수 있다면 출력에 사용자의 로캘일 형식입니다.
해결책
는 것이 가장 안전한 방법을 시작으로 UTC 날짜입니다 새로 만들려면 Date
체 및 사용 setUTC…
방법 설정하는 날짜/시간을 원합니다.
그런 다음 다양한 toLocale…String
방법은 현지에서 출력됩니다.
예제:
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
일부를 참조:
다른 팁
에 대한 새로운 프로젝트,단지 사용 moment.js
이 질문은 예쁜 오래된,그래서 moment.js 존재하지 않았던 그 시간에만 새로운 프로젝트를 간소화 작업을 다음과 같이 많습니다.
그것은 최고의 구문 분석 날짜 문자열에서 UTC 다음과 같습니다(생성 ISO8601 호환되는 문자열에 서버의 일관된 결과를 얻을 모든 브라우저에서):
var m = moment("2013-02-08T09:30:26Z");
지금 바로 사용 m
에서의 응용 프로그램 moment.js 기본값으로 지역 시간 표시하기 위한 작업입니다.가 많은 방법이 형식으로 날짜와 시간 값 또는 추출물 부분의습니다.
수도 있습 형식의 순간 객체에 사용자가 로케일 다음과 같다:
m.format('LLL') // Returns "February 8 2013 8:30 AM" on en-us
변환하 moment.js 체로 다른 시간대(i.e도 지역 중 하나나 UTC),당신은 필요합니다 moment.js 시간대를 확장.해당 페이지는 또한 몇 가지 예로,그것은 사용하기 매우 간단하다.
당신이 사용할 수 있는 new Date().getTimezoneOffset()/60
에 대한 타임존도 있습니다.도 toLocaleString()
는 방법을 표시하는 날짜를 사용하는 사용자의됩니다.
여기에는 전체 목록: 작업 날짜
일단 당신이 당신의 날짜 객체 생성,여기에 조각을 위해 변환:
이 함수는 UTC 포맷 날짜 객체고 형식 문자열입니다.
필요 합니다 Date.strftime
프로토 타입입니다.
function UTCToLocalTimeString(d, format) {
if (timeOffsetInHours == null) {
timeOffsetInHours = (new Date().getTimezoneOffset()/60) * (-1);
}
d.setHours(d.getHours() + timeOffsetInHours);
return d.strftime(format);
}
JS 없는 간단하고 크로스 플랫폼은 방법이 형식으로 로컬 날짜,시간의 외부 변환 각 객실은 위에서 언급한 바와 같이.
여기에 빠른 해킹을 사용하여 지역 YYYY-MM-DD.이는 해킹,마지막 날이 없습니다 올바른 시간대상(그래서 당신은 무시하는 표준 시간대).면 나는 아무것도 필요 더 사용 moment.js.
var d = new Date();
d = new Date(d.getTime() - d.getTimezoneOffset() * 60000)
var yyyymmdd = t.toISOString().slice(0,0);
// 2017-05-09T08:24:26.581Z (but this is not UTC)
D.getTimezoneOffset()반환 시간대 오프셋에서 분,d.getTime()에 ms,따라서 x60,000.
여기에 내가에 사용했던 과거는 프로젝트:
var myDate = new Date();
var tzo = (myDate.getTimezoneOffset()/60)*(-1);
//get server date value here, the parseInvariant is from MS Ajax, you would need to do something similar on your own
myDate = new Date.parseInvariant('<%=DataCurrentDate%>', 'yyyyMMdd hh:mm:ss');
myDate.setHours(myDate.getHours() + tzo);
//here you would have to get a handle to your span / div to set. again, I'm using MS Ajax's $get
var dateSpn = $get('dataDate');
dateSpn.innerHTML = myDate.localeFormat('F');
이 .getTimezoneOffset()
방법은 보고서는 표준 시간대 오프셋에서는 분이 계산,"서쪽"에서 GMT/UTC 시간대의 결과로 오프셋 값은 부정적인 것을 하나는 일반적으로해야합니다.(예를 들어,뉴욕 시간이 될 것으로 보고+240 분 또는 4 시간)
해 정상적인 시간대 오프셋에서 시간에,당신은 당신을 사용할 필요가:
var timeOffsetInHours = -(new Date()).getTimezoneOffset()/60
중요한 세부사항:
참고하는 일광 절약 시간에 반영한 결과 그 어떤 이 방법은 당신이 정말로 시간 offset-하지 않는 실제 지역 시간대 오프셋이 있습니다.
날짜 PHP 에서 코드 사용이 같은..
function getLocalDate(php_date) {
var dt = new Date(php_date);
var minutes = dt.getTimezoneOffset();
dt = new Date(dt.getTime() + minutes*60000);
return dt;
}
우리는 그것을 호출 할 수 있습니다 다음과 같이
var localdateObj = getLocalDate('2015-09-25T02:57:46');
내가 혼합 답변이 지금까지 추가하기 때문에,나는 그것을 모두 읽고 조사 또한면 날짜를 표시하려면 시간이 문자열에서 db 에서 사용자의 로컬 시간 형식입니다.
Datetime 문자열에서 온 python/장고 db 에서 형식은:2016-12-05T15:12:24.215Z
신뢰할 수 있는 검색 브라우저 언어에서 JavaScript 를 작동하지 않는 것 같이 모든 브라우저에서(참조하십시오 JavaScript 검출을 위한 브라우저 언어 설정),그래서 브라우저 언어에서 서버입니다.
Python/Django:요청을 보내는 브라우저 언어로 컨텍스트 매개변수:
language = request.META.get('HTTP_ACCEPT_LANGUAGE')
return render(request, 'cssexy/index.html', { "language": language })
HTML:에 쓰기 숨겨진 입력:
<input type="hidden" id="browserlanguage" value={{ language }}/>
자바스크립트:가치를 얻을의 숨겨진 입력 예:en-GB 를 en-US;q=0.8,en;q=0.6/과 그 첫 번째는 언어 목록을 통해서만 교체하고 정규 표현식
const browserlanguage = document.getElementById("browserlanguage").value;
var defaultlang = browserlanguage.replace(/(\w{2}\-\w{2}),.*/, "$1");
자바스크립트:변환하 datetime 형식을 지정:
var options = { hour: "2-digit", minute: "2-digit" };
var dt = (new Date(str)).toLocaleDateString(defaultlang, options);
결과입니다(브라우저 언어는 en-gb):05/12/2016,14:58
최고의 솔루션가를 만들기[time display="llll"datetime="UTC 시간"/]태그 및 자바 스크립트를 사용하(jquery)을 분석하고 표시에 상대적으로 사용자의 시간입니다.
http://momentjs.com/ 순간입니다.js
시간을 표시합니다.
당신이 사용할 수 있는 다음과 같은 모습을 보고서는 표준 시간대 오프셋에서 GMT 분:
new Date().getTimezoneOffset();
참고:-이 함수익에 부정적인 수입니다.
getTimeZoneOffset()및 toLocaleString 을 위한 좋은 기본적인 날짜 작업,그러나 당신이 필요로 하는 경우에 실시간대를 지원,보 mde 의 TimeZone.js.
거기에 몇 가지 옵션에서 설명한 대답을 이 질문
// new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]])
var serverDate = new Date(2018, 5, 30, 19, 13, 15); // just any date that comes from server
var serverDateStr = serverDate.toLocaleString("en-US", {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric'
})
var userDate = new Date(serverDateStr + " UTC");
var locale = window.navigator.userLanguage || window.navigator.language;
var clientDateStr = userDate.toLocaleString(locale, {
year: 'numeric',
month: 'numeric',
day: 'numeric'
});
var clientDateTimeStr = userDate.toLocaleString(locale, {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric'
});
console.log("Server UTC date: " + serverDateStr);
console.log("User's local date: " + clientDateStr);
console.log("User's local date&time: " + clientDateTimeStr);
변환하는 날짜를 로컬 날짜를 사용 toLocaleDateString()메소드가 있습니다.
var date = (new Date(str)).toLocaleDateString(defaultlang, options);
을 변환하는 시간이 현지 시간 사용 toLocaleTimeString()메소드가 있습니다.
var time = (new Date(str)).toLocaleTimeString(defaultlang, options);
지 않을 하는 방법을 알고 있 로케일,그러나 자바스크립트는 클라이언트 측의 기술입니다.
usersLocalTime = new Date();
것 항목은 오류를 발생한 클라이언트의 시간 및 날짜에 그것은(보고에 의해,자신의 브라우저 확장 컴퓨터에 앉아 있는 것에서).그것이 있어야 사소한 서버를 포함해의 시간에 응답하고 몇 가지 간단한 수학을 추측-timate 오프셋이 있습니다.