[javascript] JavaScript 날짜를 UTC로 어떻게 변환합니까?

웹 사이트 사용자가 기간을 입력한다고 가정 해 보겠습니다.

2009-1-1 to 2009-1-3

일부 처리를 위해이 날짜를 서버로 보내야하지만 서버는 모든 날짜와 시간이 UTC로 예상됩니다.

이제 사용자가 알래스카, 하와이 또는 피지에 있다고 가정합니다. UTC와는 시간대가 다르므로 날짜 범위를 다음과 같이 변환해야합니다.

2009-1-1T8:00:00 to 2009-1-4T7:59:59

JavaScript Date 객체를 사용하여 첫 번째 “현지화 된”날짜 범위를 서버가 이해할 수있는 것으로 변환하는 방법은 무엇입니까?



답변

toISOString()메서드는 단순화 된 확장 ISO 형식 ( ISO 8601 ) 으로 문자열을 반환하며 , 길이는 항상 24 자 또는 27 자 ( YYYY-MM-DDTHH:mm:ss.sssZ또는 ±YYYYYY-MM-DDTHH:mm:ss.sssZ)입니다. 표준 시간대는 접미사 ” Z” 로 표시된대로 항상 0 UTC 오프셋 입니다.

출처 : MDN 웹 문서

필요한 형식은 .toISOString()메소드를 사용하여 작성됩니다 . 이 방법을 기본적으로 지원하지 않는 구형 브라우저 (예 : 8 이하)의 경우 shim은 다음 위치에서 찾을 수 있습니다 .

이를 통해 필요한 작업을 수행 할 수 있습니다.

var isoDate = new Date('yourdatehere').toISOString();

시간대 작업의 경우 moment.js 및 moment.js 시간대 는 특히 클라이언트와 서버 자바 스크립트 사이의 시간대를 탐색하는 데 매우 유용한 도구입니다.


답변

간단하고 바보

var date = new Date(); 
var now_utc =  Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),
 date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());

 return new Date(now_utc);


답변

내 방법은 다음과 같습니다.

var now = new Date();
var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000);

결과 utc객체는 실제로 UTC 날짜가 아니지만 현지 날짜가 UTC 시간과 일치하도록 이동했습니다 (주석 참조). 그러나 실제로는 작업을 수행합니다.


답변

Date.prototype.toUTCArray= function(){
    var D= this;
    return [D.getUTCFullYear(), D.getUTCMonth(), D.getUTCDate(), D.getUTCHours(),
    D.getUTCMinutes(), D.getUTCSeconds()];
}

Date.prototype.toISO= function(){
    var tem, A= this.toUTCArray(), i= 0;
    A[1]+= 1;
    while(i++<7){
        tem= A[i];
        if(tem<10) A[i]= '0'+tem;
    }
    return A.splice(0, 3).join('-')+'T'+A.join(':');    
}


답변

날짜 / 시간을 변경하지 않고 ISO로 변환

var now = new Date(); // Fri Feb 20 2015 19:29:31 GMT+0530 (India Standard Time) 
var isoDate = new Date(now.getTime() - now.getTimezoneOffset() * 60000).toISOString();
//OUTPUT : 2015-02-20T19:29:31.238Z

날짜 / 시간 변경으로 ISO로 변환 (날짜 / 시간 변경)

isoDate = new Date(now).toISOString();
//OUTPUT : 2015-02-20T13:59:31.238Z 

바이올린 링크


답변

브라우저가 다를 수 있으며 클라이언트가 생성 한 정보를 신뢰할 수 없다는 것을 명심해야합니다. 아래 내용은 저에게 효과적입니다 (Mac OS X 10.8.2의 Chrome v24)

var utcDate = new Date(new Date().getTime());


편집 : “이것은 단지 new Date()어떻게 다른 가요?” 여기를 참조하십시오 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

  • 인수가 제공되지 않으면 생성자는 시스템 설정에 따라 현재 날짜 및 시간에 대한 JavaScript Date 객체를 만듭니다.
  • 참고 : Date가 둘 이상의 인수가있는 생성자로 호출 된 경우 지정된 인수는 현지 시간을 나타냅니다. UTC가 필요한 경우 동일한 인수로 new Date ( Date.UTC (…) )를 사용하십시오. (참고 : Date.UTC ()는 1970-01-01 00:00:00 UTC 이후의 밀리 초 수를 반환합니다)

이전 답변에서 언급했듯이 60000 * Date.getTimezoneOffset () 추가가 올바르지 않습니다. 먼저, 표시를 위해 시간대 수정자를 사용하여 모든 날짜 / 시간을 이미 UTC로 생각해야합니다.

브라우저마다 다를 수 있지만 Date.getTime ()은 1970-01-01 UTC / GMT 이후 밀리 초 수를 반환합니다. 위에서와 같이이 번호를 사용하여 새 날짜를 만들면 UTC / GMT가됩니다. 그러나 .toString ()을 호출하여 표시하는 경우 .toString ()은 호출 된 Date 객체의 시간대가 아닌 현지 시간대를 사용하므로 현지 시간대에있는 것으로 나타납니다.

또한 날짜에 .getTimezoneOffset ()을 호출하면 호출 한 날짜 객체의 시간대가 아닌 로컬 시간대를 반환한다는 것을 알았습니다 (그러나 이것이 표준인지 확인할 수는 없습니다).

브라우저에서 60000 * Date.getTimezoneOffset ()을 추가하면 UTC아닌 DateTime이 생성 됩니다. 그러나 내 브라우저 (예 : .toString ())에 표시되면 시간대 정보가 무시되면 UTC 시간이 맞는 현지 시간대의 DateTime이 표시됩니다.


답변

var myDate = new Date(); // Set this to your date in whichever timezone.
var utcDate = myDate.toUTCString();