목표 : 찾기 local time
및 UTC time offset
다음 형식으로 다음의 URL을 구성.
URL 예 : / Actions / Sleep? duration = 2002-10-10T12 : 00 : 00−05 : 00
형식은 W3C 권장 사항을 기반으로합니다.
http://www.w3.org/TR/xmlschema11-2/#dateTime
문서는 다음과 같이 말합니다.
예를 들어 2002-10-10T12 : 00 : 00−05 : 00 (2002 년 10 월 10 일 정오, 미국 동부 표준시 및 중부 일광 절약 시간)은 2002-10-10T17 : 00 : 00Z와 같습니다. 2002-10-10T12 : 00 : 00Z보다 5 시간 늦습니다.
따라서 내 이해를 바탕으로 new Date ()로 현지 시간을 찾은 다음 getTimezoneOffset () 함수를 사용하여 차이를 계산 한 다음 문자열 끝에 첨부해야합니다.
1. 형식으로 현지 시간 가져 오기
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); //today (local time)
산출
2013-07-02T09:00:00
2. UTC 시간 오프셋을 시간으로 가져옵니다.
var offset = local.getTimezoneOffset() / 60;
산출
7
3. URL 구성 (시간 부분 만 해당)
var duration = local + "-" + offset + ":00";
산출:
2013-07-02T09:00:00-7:00
위 출력은 내 현지 시간이 2013/07/02 9am이고 UTC와의 차이가 7 시간임을 의미합니다 (UTC는 현지 시간보다 7 시간 빠름).
지금까지 작동하는 것처럼 보이지만 getTimezoneOffset ()이 -120과 같은 음수 값을 반환하면 어떻게 될까요?
나는 W3C 문서에서 알아낼 수 없기 때문에 이러한 경우 형식이 어떻게 생겼는지 궁금합니다. 미리 감사드립니다.
답변
아래는 모든 브라우저에서 제대로 작동해야합니다 (팁은 @MattJohnson에게 감사드립니다).
Date.prototype.toIsoString = function() {
var tzo = -this.getTimezoneOffset(),
dif = tzo >= 0 ? '+' : '-',
pad = function(num) {
var norm = Math.floor(Math.abs(num));
return (norm < 10 ? '0' : '') + norm;
};
return this.getFullYear() +
'-' + pad(this.getMonth() + 1) +
'-' + pad(this.getDate()) +
'T' + pad(this.getHours()) +
':' + pad(this.getMinutes()) +
':' + pad(this.getSeconds()) +
dif + pad(tzo / 60) +
':' + pad(tzo % 60);
}
var dt = new Date();
console.log(dt.toIsoString());
답변
getTimezoneOffset()
참조한 사양에 필요한 형식의 반대 부호를 반환합니다.
이 형식은 ISO8601 또는보다 정확하게는 RFC3339 라고도 합니다.
이 형식에서 UTC는으로 표시되고 Z
다른 모든 형식은 UTC로부터의 오프셋으로 표시됩니다. 의미는 JavaScript와 동일하지만 빼기 순서가 반전되어 결과에 반대 부호가 표시됩니다.
또한 Date
라는 네이티브 개체 에는 메서드가 없으므로 format
라이브러리를 사용하여이를 달성하지 않는 한 # 1의 함수가 실패합니다. 이 문서를 참조하십시오 .
이 형식으로 직접 작업 할 수있는 라이브러리를 찾고 있다면 moment.js를 사용하는 것이 좋습니다 . 실제로 이것은 기본 형식이므로 다음과 같이 간단히 수행 할 수 있습니다.
var m = moment(); // get "now" as a moment
var s = m.format(); // the ISO format is the default so no parameters are needed
// sample output: 2013-07-01T17:55:13-07:00
이것은 잘 테스트 된 브라우저 간 솔루션이며 다른 많은 유용한 기능이 있습니다.
답변
표준 라이브러리에 대한 단일 API 호출만으로 요청 된 정보를 얻을 수 있다는 점을 고려할 가치가 있다고 생각합니다.
new Date().toLocaleString( 'sv', { timeZoneName: 'short' } );
// produces "2019-10-30 15:33:47 GMT−4"
‘T’구분 기호를 추가하거나 ‘GMT-‘를 제거하거나 끝에 ‘: 00’을 추가하려면 텍스트 교체를 수행해야합니다.
그러나 원하는 경우 다른 옵션을 쉽게 사용할 수 있습니다 . 12h 시간을 사용하거나 초를 생략하십시오.
스웨덴은 ISO 8601 형식을 사용하는 국가 중 하나이기 때문에 로케일로 스웨덴을 사용하고 있습니다. 나는 대부분의 ISO 국가가 시간대 약어를 사용하는 캐나다 이외의 시간대 오프셋 에이 ‘GMT-4’형식을 사용한다고 생각합니다. 동부 일광 절약 시간의 경우 “EDT”.
새로운 표준 i18n 함수 “Intl.DateTimeFormat ()”에서 동일한 것을 얻을 수 있지만 옵션을 통해 시간을 포함하도록 지정해야합니다. 그렇지 않으면 날짜 만 제공됩니다.
답변
이것은 클라이언트 시간대에 대한 내 기능이며 가볍고 간단합니다.
function getCurrentDateTimeMySql() {
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, 19).replace('T', ' ');
var mySqlDT = localISOTime;
return mySqlDT;
}
답변
이것을 확인하십시오 :
function dateToLocalISO(date) {
const off = date.getTimezoneOffset()
const absoff = Math.abs(off)
return (new Date(date.getTime() - off*60*1000).toISOString().substr(0,23) +
(off > 0 ? '-' : '+') +
(absoff / 60).toFixed(0).padStart(2,'0') + ':' +
(absoff % 60).toString().padStart(2,'0'))
}
// Test it:
d = new Date()
dateToLocalISO(d)
// ==> '2019-06-21T16:07:22.181-03:00'
// Is similar to:
moment = require('moment')
moment(d).format('YYYY-MM-DDTHH:mm:ss.SSSZ')
// ==> '2019-06-21T16:07:22.181-03:00'
답변
moment.js가 필요하지 않습니다. 여기 에 ISOLocal 문자열을 GMT에서 UTCseconds로 출력하는 “datetime-local” 입력 유형 에서 전체 왕복 답변이 있습니다 .
<input type="datetime-local" value="2020-02-16T19:30">
isoLocal="2020-02-16T19:30"
utcSeconds=new Date(isoLocal).getTime()/1000
//here you have 1581899400 for utcSeconds
let isoLocal=new Date(utcSeconds*1000-new Date().getTimezoneOffset()*60000).toISOString().substring(0,16)
2020-02-16T19:30
답변
내 두 사람 만 여기로 보내
나는 datetimes와 함께이 문제에 직면했기 때문에 내가 한 일은 다음과 같습니다.
const moment = require('moment-timezone')
const date = moment.tz('America/Bogota').format()
그런 다음 일부 쿼리에서 비교할 수 있도록 날짜를 db에 저장하십시오.
설치하기 위해서 moment-timezone
npm i moment-timezone