JavaScript에서 날짜를 다른 시간대로 변환


336

한 시간대의 날짜를 다른 시간대로 변환하는 함수를 찾고 있습니다.

두 개의 매개 변수가 필요합니다.

  • 날짜 ( "2012/04/10 10:10:30 +0000"형식)
  • 시간대 문자열 ( "아시아 / 자카르타")

시간대 문자열은 http://en.wikipedia.org/wiki/Zone.tab에 설명되어 있습니다 .

이 작업을 수행하는 쉬운 방법이 있습니까?


1
주어진 도시의 UTC 오프셋을 찾으십시오. stackoverflow.com/questions/3002910/…
Brandon Boone

3
UTC 오프셋뿐만 아니라 일광 절약 / 서머 타임도 계산하고 싶습니다. 따라서 시간이 올바르게 돌아옵니다.
Rizky Ramadhan


이것도 함께 확인하십시오 stackoverflow.com/questions/16084313/…
Amol M Kulkarni

+ %의 -d '1 년 1 월 1970 날짜 : 유닉스 date 명령을 사용하여 시간대의 설정 끄기
안토니

답변:


191

var aestTime = new Date().toLocaleString("en-US", {timeZone: "Australia/Brisbane"});
console.log('AEST time: '+ (new Date(aestTime)).toISOString())

var asiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Shanghai"});
console.log('Asia time: '+ (new Date(asiaTime)).toISOString())

var usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"});
console.log('USA time: '+ (new Date(usaTime)).toISOString())

var indiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Kolkata"});
console.log('India time: '+ (new Date(indiaTime)).toISOString())

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString


1
이것은 라이브러리를 사용하지 않고 정확하고 표준적인 방법이므로 이에 대한 답변을 변경했습니다.
Rizky Ramadhan

5
MDN 문서에 따르면 모든 구현에서 인식해야하는 유일한 시간대는 UTC뿐입니다. ( stackoverflow.com/questions/10087819/… ) IE11에서 [Run code snippet] 버튼을 클릭하면 오류가 발생합니다.
Vivian River

1
지금 모든 브라우저에서 작동하는 구현을 찾고 있다면 누구나 자체 단점으로 아래의 답변을 시도해 볼 수 있습니다.
Rizky Ramadhan

14
이 답변은 시간대를 올바르게 전달하는 것을 보여줍니다. toLocaleString 것을 보여 주지만 해당 문자열을 Date생성자 로 다시 전달하는 것은 매우 잘못 표시합니다 . 그것은 문제를 요구하고 있습니다. 날짜 문자열 구문 분석기는 로케일 특정 형식을 승인하지 않아도되며 입력은 마치 현지 시간대 인 것처럼 처리됩니다. 하지마 첫 번째 toLocalString호출 의 문자열 출력 만 사용하십시오 .
Matt Johnson-Pint

4
@MattJohnson 그러면 getHour () 또는 그러한 메소드를 사용할 수 없습니다
Ali Padida

131

들어 moment.js의 사용자, 당신은 지금 사용할 수있는 순간 시간대를 . 그것을 사용하면 함수는 다음과 같습니다.

function toTimeZone(time, zone) {
    var format = 'YYYY/MM/DD HH:mm:ss ZZ';
    return moment(time, format).tz(zone).format(format);
}

3
새로운 시간대를 추가하는 방법을 잘 모르겠습니다. 문서가 도움이되지 않았습니다. 나는 시간 전문가가 아닌 프로그래머 일뿐입니다!
Parziphal

8
여기서 문제는 새로운 Date 객체를 반환하지 않고 문자열을 반환한다는 것입니다. 그것이 당신이 원하는 것이라면 물론입니다.
nickdnk

2
"return moment (time) .tz (zone) .format (format);"이 아닙니까? ? 귀하의 코드에서 제공 한 내용에 "잘못된 날짜"오류가 표시됩니다.
Tarek

1
브라우저에서 Moment.js를로드 할 수 없습니다. 매우 슬프다 :(
Daniil Shevelev

4
tz 데이터베이스의 사본으로 브라우저에 180K를 전송하는 것이 마음에 들지 않고 이전 브라우저에서 현재 시간대로 저하 될 수있는 경우을 사용하여 @lambinator의 답변을 시도하십시오 Date.prototype.toLocaleString.
피터 V. Mørch

92

http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329 에서 뻔뻔스럽게 도난

/** 
 * function to calculate local time
 * in a different city
 * given the city's UTC offset
 */
function calcTime(city, offset) {

    // create Date object for current location
    var d = new Date();

    // convert to msec
    // add local time zone offset
    // get UTC time in msec
    var utc = d.getTime() + (d.getTimezoneOffset() * 60000);

    // create new Date object for different city
    // using supplied offset
    var nd = new Date(utc + (3600000*offset));

    // return time as a string
    return "The local time in " + city + " is " + nd.toLocaleString();
}

이 기능은 도시 / 국가 이름 및 오프셋 값을 제공하여 시간대 값을 계산하는 데 유용합니다.


4
근사하지만 .. 그가 지나간 도시를 기반으로 오프셋을 찾아보고 싶다고 생각합니다.
Brandon Boone

117
일광 절약 시간제 변경 사항은 고려하지 않습니다.
Robotbugs

12
질문에 대답하지 않고 내 대답에 답하십시오 (+1)
Reign.85

그 '3600000'은 문자 그대로 나를 죽였습니다! 입력에서 tz는 시간 단위로 제공되어야합니다! 그리고 빼야합니다. 따라서 다음을 전달하면 var d = new Date calcTime ( '', d.getTimezoneOffset () / 60); 같은 시간을 돌려줘야합니다.
Praveen

1
이 답변은 최신 정보가 아니므로 특히 toLocaleString을 사용하는 부분을 제거해야합니다.이 부분 은 다른 시간대로 이동했을 때 호스트 시간대를보고 할 수 있습니다. 서로 다른 오프셋에 대한 타임 스탬프를 수동으로 만드는 훨씬 더 좋은 방법이 있습니다.
RobG

89

Safari를 제외한 대부분의 데스크탑 (모바일 아님) 브라우저 는 인수와 함께 toLocaleString 함수를 지원하지만 이전 브라우저는 일반적으로 인수를 무시합니다.

new Date().toLocaleString('en-US', { timeZone: 'Asia/Jakarta' })

4
Firefox와 Edge에서 실패 :(
Šime Vidas

10
FF 및 IE11 +에서는 이것이 실패하기 때문에 다른 솔루션을 찾아야합니다.
jdavid.net

2
가장자리와 크롬은 그것을 좋아했다 :)
Suhail Mumtaz Awan

6
Chrome v59 및 Firefox 데스크톱 v54 및 Android v59의 Chome 및 iOS 10.3의 Safari 10에서 방금 작동했습니다. IE10에서는 작동하지 않았습니다. Date.prototype.toLocaleString ()에 대한 MDN 설명에는toLocaleStringSupportsLocales() 지원을 안정적으로 확인할 수 있는 구현이 있습니다.
피터 V. Mørch

1
성공적으로 Node.js를 v8.7.0 테스트
하인리히 울 브리 히트

56

알았어!

내가 사용하고 시간대-JS를 . 이것은 코드입니다.

var dt = new timezoneJS.Date("2012/04/10 10:10:30 +0000", 'Europe/London');
dt.setTimezone("Asia/Jakarta");

console.debug(dt); //return formatted date-time in asia/jakarta

90
나는 이것에 반대 투표해야하며 timezone-js는 DST를 지원하지 않으며 readme에서이를 알리지 않으므로 이것을 찾는 사람들에게 나쁜 팁이됩니다. github.com/mde/timezone-js/issues/51 및 제출되었으며 수정되지 않은 다른 많은 문제를 참조하십시오 .

@nus 예,하지만 실제로 클라이언트 측 시간대 / 날짜 관리를위한 솔루션이 없습니다 ... jquery ui datepicker는 이것 때문에 나를 미치게했습니다. 건배
루카스

2
@Marabunta는 순간 시간대 (브라이언 드 팔마 의해 답변) 같은 외모 DST 지원 github.com/moment/moment-timezone/issues/21
welldan97

2
TimezoneJS를 사용하지 마십시오 .DST 변경과 관련하여 버그가 있습니다.
matf

17

큰 라이브러리를 가져 오지 않으려면 Intl.DateTimeFormat 을 사용 하여 Date 객체를 다른 시간대로 변환하면됩니다.

// Specifying timeZone is what causes the conversion, the rest is just formatting
const options = {
  year: '2-digit', month: '2-digit', day: '2-digit',
  hour: '2-digit', minute: '2-digit', second: '2-digit',
  timeZone: 'Asia/Jakarta',
  timeZoneName: 'short'
}
const formater = new Intl.DateTimeFormat('sv-SE', options)
const startingDate = new Date("2012/04/10 10:10:30 +0000")

const dateInNewTimezone = formater.format(startingDate) 
console.log(dateInNewTimezone) // 12-04-10 17:10:30 GMT+7

오프셋, 일광 절약 및 과거의 변경 사항이 처리됩니다.


IE10 +는 표준 시간대에 대한 Intl API를 지원하지 않습니다. moment.github.io/luxon/docs/manual/matrix.html
클로

이것이 실제로 가장 좋은 대답입니다. toLocaleString일관되지 않은 구현이 있으며 IE11부터 작동합니다.
dlsso

참고 : 이것은 실제로 Windows 8.1 이상에서는 IE11에서 작동하지 않습니다. 당신이 만들려고 할 때 formatter개체를, 당신이 얻을 :```옵션 값 'timeZone가'에 대한 '아시아 / 자카르타는'유효 범위를 벗어납니다. 예상 : [ 'UTC']```
veddermatic

포맷터의 최종 결과를 다시 Date 객체로 변환하는 방법이 있습니까?
mding5692

10

알았다 !

표시된 날짜 = 서버 날짜를 강제하고 싶었으므로 로컬 설정 (UTC)이 중요하지 않습니다.

내 서버는 GMT-6-> new Date (). getTimezoneOffset () = 360입니다.

myTZO = 360;
myNewDate=new Date(myOldDateObj.getTime() + (60000*(myOldDateObj.getTimezoneOffset()-myTZO)));
alert(myNewDate);

2
올바른 순진 시간을 표시하지만 myOldDateObj의 시간대 정보가 유지됩니다. 따라서 실제로 시간이 잘못되었습니다 (시계로 시간이 아닌 시간으로 인스턴스화하는 경우).
gabn88

@ gabn88 : Javascript를 사용하여 서버 시간을 변경할 수 없습니다 ... 서버 시간을 수정하려면 운영 체제 수준에서 수행하십시오.
Cedric Simon

2
서버 시간을 수정할 필요는 없습니다.;) 서버 시간은 항상 UTC입니다. 그러나 나는 다른 시간대로 다른 조직을 가지고 있습니다. 또한 장치는 항상 조직의 위치와 시간을 항상 표시해야합니다.
gabn88

우리는 날짜를 항상 X 시간대로 보여주는 비슷한 문제를 겪습니다. 우리는 서버에서 모든 날짜를 문자열 형식으로 보내려고 시도하고 브라우저에서는 날짜를 현지 시간대 날짜로 취급합니다.
Venkateswara Rao

5

시간대를 설정하기 위해 toLocaleString () 메소드를 사용할 수 있습니다.

new Date().toLocaleString('en-US', { timeZone: 'Indian/Christmas' })

인도의 경우 "인도 / 크리스마스"를 사용할 수 있으며 다음은 다양한 시간대입니다.

"Antarctica/Davis",
    "Asia/Bangkok",
    "Asia/Hovd",
    "Asia/Jakarta",
    "Asia/Phnom_Penh",
    "Asia/Pontianak",
    "Asia/Saigon",
    "Asia/Vientiane",
    "Etc/GMT-7",
    "Indian/Christmas"

timeZone을 설정하지 않고 해당 timeZone에 표시된 시간으로 문자열을 생성합니다. 날짜는 동일하게 유지됩니다.
Gerard ONeill


4

시간대를 변환 해야하는 경우 최소한의 기능만으로 제거모멘트 시간대의 버전 을 업로드했습니다 . ~ 1KB + 데이터 :

S.loadData({
    "zones": [
        "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6",
        "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5",
    ],
    "links": [
        "Europe/Paris|Europe/Madrid",
    ]
});

let d = new Date();
console.log(S.tz(d, "Europe/Madrid").toLocaleString());
console.log(S.tz(d, "Australia/Sydney").toLocaleString());

2

연도, 월, 일을 '-'기호로 구분하고 'T'와 HH : mm : ss 패턴의 시간으로 변수를 설정 한 다음 문자열 끝에 +01 : 00을 입력하십시오 (제 경우에는 시간대는 +1)입니다. 그런 다음이 문자열을 날짜 생성자의 인수로 사용하십시오.

//desired format: 2001-02-04T08:16:32+01:00
dateAndTime = year+"-"+month+"-"+day+"T"+hour+":"+minutes+":00+01:00";

var date = new Date(dateAndTime );

2

사용할 수있는 외부 라이브러리는 제한되어 있습니다. moment.js와 timezone-js는 옵션이 아니 었습니다.

내가 가진 js 날짜 객체는 UTC입니다. 특정 시간대 (이 경우 '미국 / 시카고')에서이 날짜의 날짜와 시간을 가져와야했습니다.

 var currentUtcTime = new Date(); // This is in UTC

 // Converts the UTC time to a locale specific format, including adjusting for timezone.
 var currentDateTimeCentralTimeZone = new Date(currentUtcTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));

 console.log('currentUtcTime: ' + currentUtcTime.toLocaleDateString());
 console.log('currentUtcTime Hour: ' + currentUtcTime.getHours());
 console.log('currentUtcTime Minute: ' + currentUtcTime.getMinutes());
 console.log('currentDateTimeCentralTimeZone: ' +        currentDateTimeCentralTimeZone.toLocaleDateString());
 console.log('currentDateTimeCentralTimeZone Hour: ' + currentDateTimeCentralTimeZone.getHours());
 console.log('currentDateTimeCentralTimeZone Minute: ' + currentDateTimeCentralTimeZone.getMinutes());

UTC는 현재 '미국 / 시카고'보다 6 시간 빠릅니다. 출력은 다음과 같습니다

currentUtcTime: 11/25/2016
currentUtcTime Hour: 16
currentUtcTime Minute: 15

currentDateTimeCentralTimeZone: 11/25/2016
currentDateTimeCentralTimeZone Hour: 10
currentDateTimeCentralTimeZone Minute: 15

11
new Date();UTC가 아닌 현지 시간대로 돌아 가기
Mirko

1
문서에서 :If no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
Mirko

흠. 혼란 스럽습니다. 날짜의 시간대는 변경되지 않습니다. 오히려 변경된 시간으로 새로운 날짜를 만듭니다. toLocaleString 호출에서 작성된 문자열에서 원하는 값을 추출하기 위해 정규식을 사용하는 것이 훨씬 더 명확합니다.
Gerard ONeill

2

여기 내 코드가 있습니다. 완벽하게 작동합니다. 아래 데모를 시도해보십시오.

$(document).ready(function() {
   //EST
setInterval( function() {
var estTime = new Date();
 var currentDateTimeCentralTimeZone = new Date(estTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));
var seconds = currentDateTimeCentralTimeZone.getSeconds();
var minutes = currentDateTimeCentralTimeZone.getMinutes();
var hours =  currentDateTimeCentralTimeZone.getHours()+1;//new Date().getHours();
 var am_pm = currentDateTimeCentralTimeZone.getHours() >= 12 ? "PM" : "AM";

if (hours < 10){
     hours = "0" + hours;
}

if (minutes < 10){
     minutes = "0" + minutes;
}
if (seconds < 10){
     seconds = "0" + seconds;
}
    var mid='PM';
    if(hours==0){ //At 00 hours we need to show 12 am
    hours=12;
    }
    else if(hours>12)
    {
    hours=hours%12;
    mid='AM';
    }
    var x3 = hours+':'+minutes+':'+seconds +' '+am_pm
// Add a leading zero to seconds value
$("#sec").html(x3);
},1000);


});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<p class="date_time"><strong id="sec"></strong></p>
</body>
</html>


StackOverflow에 오신 것을 환영합니다! 이 코드의 작동 방식 및 기능과 같은 추가 정보를 제공 할 수 있습니까? 문제를 어떻게 해결합니까?
DarkSuniuM

위의 코드는 시간대를 다른 국가 시간대로 업데이트하는 것입니다.
Sahil Kapoor

HTML을 html 파일에 넣고 위의 jquery 코드가 바닥 글에 있어야합니다. 다른 국가의 시간대 감사하려는 경우,이 두 값을 업데이트해야합니다 : 그것은 ({ '미국 / 시카고'timeZone가} 'EN-US')에 따라 당신을 위해 작동합니다
사힐 카푸어

기다리지 마 난 그냥 조심스럽게 보지 않고 이것을 upvoted. 왜 1을 추가 currentDateTimeCentralTimeZone.getHours()합니까? 이 seeking27의 응답으로 동일하게 작동하고있다 것없이 stackoverflow.com/a/40809160/1404185
chetstone

1

날짜 시간대를 인도로 변환하기 위해 이것을 시도 할 수도 있습니다.

var indianTimeZoneVal = new Date().toLocaleString('en-US', {timeZone: 'Asia/Kolkata'});
var indainDateObj = new Date(indianTimeZoneVal);
indainDateObj.setHours(indainDateObj.getHours() + 5);
indainDateObj.setMinutes(indainDateObj.getMinutes() + 30);
console.log(indainDateObj);

1
2 단계 자체 후 인도에서 시간을 얻습니다 ... 그래서 왜 여전히 5 & 1/2 시간을 추가합니까?
user3833732

이 방법을 사용할 때 Chrome으로 로그를 콘솔하면 노르웨이에서 다음을 얻습니다. 원본 : Thu Sep 27 2018 15:53:46 GMT + 0200 (중앙 유럽 위험). 수정 : Thu Sep 27 2018 19:23:46 GMT + 0200 (중앙 유럽 위험). "중앙 유럽 위험은"중부 유럽 서머 타임을 의미합니다. 인도에 서머 타임이 필요할 때 작동하는지, 또는 인도에 서 유럽에 서머 타임이 필요할 때도 마찬가지인지 확실하지 않습니다.
Kebman

이와 같이 setHours ()를 사용하면 일, 월, 연도 전환을 고려하지 않습니다. 예를 들어 8 일 New Dell에서 오전 3시 30 분은 런던에서 7 일 오후 11시입니다. 그런 다음 달, 연도 및 윤년의 끝을 고려하십시오. 날짜에 수학을 쓰도록 <pre> let local_time = new Date (zulu_time.getTime () + 3600000 * std_timezone.timezone_factor-60 * 60 * 1000); date_str = local_time.toISOString (). slice (0, 10); let time_str = local_time.toISOString (). slice (11, -1); let timezone_str = std_timezone.timezone_str; </ pre>
Lincoln Randall McFarland

1

이 페이지의 링크를 포함하여 많은 것을 둘러 본 순간 순간 시간대를 사용 하여이 훌륭한 기사를 찾았습니다.

https://www.webniraj.com/2016/11/23/javascript-using-moment-js-to-display-dates-times-in-users-timezone/

요약하면 다음과 같습니다.

사용자의 시간대를 가져옵니다

var tz = moment.tz.guess();
console.info('Timezone: ' + tz);

예 : 시간대 : 유럽 / 런던

기본 사용자 시간대 설정

moment.tz.setDefault(tz);

맞춤 시간대 설정

moment.tz.setDefault('America/Los_Angeles');

날짜 / 시간을 현지 시간대로 변환, 원래 날짜 / 시간이 UTC로 가정

moment.utc('2016-12-25 07:00').tz(tz).format('ddd, Do MMMM YYYY, h:mma');

반환 : 2016 년 12 월 25 일 일요일 오전 7시

날짜 / 시간을 LA 시간으로 변환

moment.utc('2016-12-25 07:00').tz('America/Los_Angeles').format('ddd, Do MMMM YYYY, h:mma');

반환 : 2016 년 12 월 24 일 토요일 오후 11:00

LA에서 런던으로 변환

moment.tz('2016-12-25 07:00', 'America/Los_Angeles').tz('Europe/London').format( 'ddd, Do MMMM YYYY, h:mma' );

반환 : 2016 년 12 월 25 일 일요일 오후 3시


1

https://www.npmjs.com/package/ctoc_timezone 을 사용할 수도 있습니다

훨씬 간단한 구현 및 형식 사용자 지정이 가능합니다.

toTimeZone에서 형식 변경 :

CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");

출력 :

28th Feb 2013 19:00:00 EST

문서에서 여러 기능을 탐색 할 수 있습니다.


0

이를 위해 사용할 수있는 'timezones.json'이라는 npm 모듈이 있습니다. 기본적으로 일광 절약 및 오프셋에 대한 정보가 포함 된 객체가 포함 된 json 파일로 구성됩니다.

아시아 / 자카르타의 경우이 객체를 반환 할 수 있습니다.

{
  "value": "SE Asia Standard Time",
  "abbr": "SAST",
  "offset": 7,
  "isdst": false,
  "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
  "utc": [
    "Antarctica/Davis",
    "Asia/Bangkok",
    "Asia/Hovd",
    "Asia/Jakarta",
    "Asia/Phnom_Penh",
    "Asia/Pontianak",
    "Asia/Saigon",
    "Asia/Vientiane",
    "Etc/GMT-7",
    "Indian/Christmas"
  ]
}

여기에서 찾을 수 있습니다.

https://github.com/dmfilipenko/timezones.json

https://www.npmjs.com/package/timezones.json

유용하길 바래


0

java 8 java.time패키지에 익숙한 사람들 joda-time은 아마도 js-joda 라이브러리 의 새로운 아이를 좋아할 것입니다 .

설치

npm install js-joda js-joda-timezone --save

<script src="node_modules/js-joda/dist/js-joda.js"></script>
<script src="node_modules/js-joda-timezone/dist/js-joda-timezone.js"></script>
<script>
var dateStr = '2012/04/10 10:10:30 +0000';
JSJoda.use(JSJodaTimezone);
var j = JSJoda;
// https://js-joda.github.io/js-joda/esdoc/class/src/format/DateTimeFormatter.js~DateTimeFormatter.html#static-method-of-pattern
var zonedDateTime = j.ZonedDateTime.parse(dateStr, j.DateTimeFormatter.ofPattern('yyyy/MM/dd HH:mm:ss xx'));
var adjustedZonedDateTime = zonedDateTime.withZoneSameInstant(j.ZoneId.of('America/New_York'));
console.log(zonedDateTime.toString(), '=>', adjustedZonedDateTime.toString());
// 2012-04-10T10:10:30Z => 2012-04-10T06:10:30-04:00[America/New_York]
</script>

진정한 Java 본질에서는 꽤 장황합니다. 그러나 이식 된 Java 라이브러리 인 경우, 특히 1800'ish 테스트 사례를 이식 한 것을 고려할 때 아마도 매우 정확하게 작동합니다.

크로노 조작이 어렵다. 그렇기 때문에 다른 많은 라이브러리가 가장자리가 까다로운 이유입니다. Moment.js는 시간대를 올바르게 얻는 것처럼 보이지만을 포함하여 내가 본 다른 JS 라이브러리 timezone-js는 신뢰할 수없는 것으로 보입니다.


0

나는 최근에 Typescript에서 이것을했다 :

// fromTimezone example : Europe/Paris, toTimezone example: Europe/London
private calcTime( fromTimezone: string, toTimezone: string, dateFromTimezone: Date ): Date {
  const dateToGetOffset = new Date( 2018, 5, 1, 12 );

  const fromTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: fromTimezone, hour12: false } );
  const toTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: toTimezone, hour12: false } );

  const fromTimeHours: number = parseInt( fromTimeString.substr( 0, 2 ), 10 );
  const toTimeHours: number = parseInt( toTimeString.substr( 0, 2 ), 10 );

  const offset: number = fromTimeHours - toTimeHours;

  // convert to msec
  // add local time zone offset
  // get UTC time in msec
  const dateFromTimezoneUTC = Date.UTC( dateFromTimezone.getUTCFullYear(),
    dateFromTimezone.getUTCMonth(),
    dateFromTimezone.getUTCDate(),
    dateFromTimezone.getUTCHours(),
    dateFromTimezone.getUTCMinutes(),
    dateFromTimezone.getUTCSeconds(),
  );

  // create new Date object for different city
  // using supplied offset
  const dateUTC = new Date( dateFromTimezoneUTC + ( 3600000 * offset ) );

  // return time as a string
  return dateUTC;
}

"en-UK"형식은 단순하기 때문에 사용합니다. "en-US"일 수도 있고 작동 할 수도 있습니다.

첫 번째 인수가 로케일 시간대이고 두 번째 인수가 대상 시간대 인 경우 올바른 오프셋으로 Date 객체를 반환합니다.


0

순간 시간대를 사용하는 데 문제가있었습니다 . 다른 사람이 같은 문제에 직면하면이 답변을 추가하고 있습니다. 그래서 2018-06-14 13:51:00내 날짜 문자열 이 있습니다 API. 나는 이것이 저장된다는 것을 알고있다.UTC 있지만 문자열 자체를 말하지 않는다는 있습니다.

나는 시간대를 알려줌으로써이 날짜의 시간대는 다음과 같습니다.

let uTCDatetime = momentTz.tz("2018-06-14 13:51:00", "UTC").format();
// If your datetime is from any other timezone then add that instead of "UTC"
// this actually makes the date as : 2018-06-14T13:51:00Z

이제 다음을 수행하여 특정 시간대로 변환하고 싶습니다.

let dateInMyTimeZone = momentTz.tz(uTCDatetime, "Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss");
// now this results into: 2018-06-14 19:21:00, which is the corresponding date in my timezone.

0

원하는 국가 시간대를 설정하기 만하면 html로 쉽게 표시 할 수 있으며 매 분마다 SetInteval () 함수를 사용하여 업데이트됩니다. AMPM () 함수는 12 시간 형식과 AM / PM 시간 표시를 관리합니다.

$(document).ready(function(){
        var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
        pakTime = new Date(pakTime);

        var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
        libyaTime = new Date(libyaTime);



         document.getElementById("pak").innerHTML = "PAK  "+formatAMPM(pakTime);
         document.getElementById("ly").innerHTML = "LY   " +formatAMPM(libyaTime);

        setInterval(function(today) {
            var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
            pakTime = new Date(pakTime);

            var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
            libyaTime = new Date(libyaTime);


           document.getElementById("pak").innerHTML = "PAK  "+formatAMPM(pakTime);
           document.getElementById("ly").innerHTML = "LY  " +formatAMPM(libyaTime);

        },10000);

         function formatAMPM(date) {
            var hours = date.getHours();
            var minutes = date.getMinutes();
            var ampm = hours >= 12 ? 'pm' : 'am';
            hours = hours % 12;
            hours = hours ? hours : 12; // the hour '0' should be '12'
            minutes = minutes < 10 ? '0'+minutes : minutes;
            var strTime = hours + ':' + minutes + ' ' + ampm;
            return strTime;
        }


    });

-1

날짜 개체를 표준 시간대로 변환하는 쉬운 방법을 모르지만 로컬 표준 시간대로 변환 Date.prototype.getTime()하려면 해당 밀리 초 단위 로 변환 하고 다시 되돌릴 수 있습니다.

date = new Date('2016-05-24T13:07:20');
date = new Date(date.getTime());

예를 들어, date.getHours()지금 돌아갑니다 15대신 13오스트리아, 나 같은, 당신이 경우 (그리고 그것의 여름).

다양한 날짜 시간 함수가 일부 브라우저에서 비표준 동작을 나타낼 수 있으므로 먼저 테스트하십시오. Chrome에서 작동하는지 확인할 수 있습니다.


1
왜 투표가 거부 되었습니까? 이것이 지금까지 가장 쉽고 가장 좋은 방법입니다. 위의 답변 대부분은 여름 / 겨울 시간을 고려하지 않습니다
MortenSickel

두 번째 줄의 요점은 무엇입니까? 날짜 생성자는 현지 시간대가 이미 있다고 가정합니다. 이 두 줄 모두 로컬 브라우저 시간대로 날짜를 반환하며 일광 절약 시간으로 다른 시간대로 변환하는 방법에 대한 질문에 대답하지 않습니다.
Chloe

-1

현재 시간대의 시간대 오프셋

date +%s -d '1 Jan 1970'

내 GMT + 10 시간대 (호주)의 경우 -36000을 반환했습니다.


-6

빠르고 더러운 수동 시간 교환기 및 반환 :

return new Date(new Date().setHours(new Date().getHours()+3)).getHours()

너무 더럽고 너무 지저분하다
Maxwell sc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.