문제

서버가 항상 역할 날짜 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);

보: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

결과입니다(브라우저 언어는 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 오프셋이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top