웹 사이트 사용자가 기간을 입력한다고 가정 해 보겠습니다.
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();