javascript toISOString()이 시간대 오프셋을 무시합니다.
Twitter datetime을 로컬 iso 문자열(pretty Date용)로 이틀간 변환하려고 합니다.현지 시간을 제대로 못 잡아서..
다음 기능을 사용하고 있습니다.
function getLocalISOTime(twDate) {
var d = new Date(twDate);
var utcd = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(),
d.getMinutes(), d.getSeconds(), d.getMilliseconds());
// obtain local UTC offset and convert to msec
localOffset = d.getTimezoneOffset() * 60000;
var newdate = new Date(utcd + localOffset);
return newdate.toISOString().replace(".000", "");
}
newdate에서는 모든 것이 정상입니다만, toISOString()은 원래 시간으로 되돌립니다.Twitterdate에서 ISO로 된 현지시간 취득을 도와주시겠습니까?2012년 5월 31일 (목) 08:33:41 +0000
moment.js
훌륭합니다만, 심플한 것에 대해서 많은 의존을 하고 싶지 않을 때가 있습니다.
다음 작업도 가능합니다.
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
var localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, -1);
console.log(localISOTime) // => '2015-01-26T06:40:36.181'
그slice(0, -1)
뒤처짐을 없애다Z
이것은 Zulu 타임존을 나타내며 사용자 자신의 타임존으로 대체할 수 있습니다.
사용하지 않는 솔루션moment
타임 스탬프로 변환하고 타임 존오프셋을 추가한 후 날짜 객체로 다시 변환한 후,toISOString()
var date = new Date(); // Or the date you'd like converted.
var isoDateTime = new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString();
moment.js FTW!!
날짜를 순간으로 변환하고 원하는 대로 조작하면 됩니다.
var d = new Date(twDate);
var m = moment(d).format();
console.log(m);
// example output:
// 2016-01-08T00:00:00-06:00
다음 날짜 함수는 스크립트 라이브러리를 추가하지 않고도 원하는 효과를 얻을 수 있습니다.기본적으로는 단순한 날짜 구성 요소를 올바른 형식으로 연결하고 날짜 개체의 프로토타입을 확대하는 것입니다.
Date.prototype.dateToISO8601String = function() {
var padDigits = function padDigits(number, digits) {
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}
var offsetMinutes = this.getTimezoneOffset();
var offsetHours = offsetMinutes / 60;
var offset= "Z";
if (offsetHours < 0)
offset = "-" + padDigits(offsetHours.replace("-","") + "00",4);
else if (offsetHours > 0)
offset = "+" + padDigits(offsetHours + "00", 4);
return this.getFullYear()
+ "-" + padDigits((this.getUTCMonth()+1),2)
+ "-" + padDigits(this.getUTCDate(),2)
+ "T"
+ padDigits(this.getUTCHours(),2)
+ ":" + padDigits(this.getUTCMinutes(),2)
+ ":" + padDigits(this.getUTCSeconds(),2)
+ "." + padDigits(this.getUTCMilliseconds(),2)
+ offset;
}
Date.dateFromISO8601 = function(isoDateString) {
var parts = isoDateString.match(/\d+/g);
var isoTime = Date.UTC(parts[0], parts[1] - 1, parts[2], parts[3], parts[4], parts[5]);
var isoDate = new Date(isoTime);
return isoDate;
}
function test() {
var dIn = new Date();
var isoDateString = dIn.dateToISO8601String();
var dOut = Date.dateFromISO8601(isoDateString);
var dInStr = dIn.toUTCString();
var dOutStr = dOut.toUTCString();
console.log("Dates are equal: " + (dInStr == dOutStr));
}
사용방법:
var d = new Date();
console.log(d.dateToISO8601String());
이게 다른 사람에게 도움이 되길 바라.
편집
코멘트에 기재된 UTC 문제를 수정하고 Alex에 대한 신용을dateFromISO8601
기능.
현재 날짜와 시간을 알 수 있으면 매우 도움이 될 것입니다.
var date=new Date();
var today=new Date(date.getTime() - (date.getTimezoneOffset() * 60000)).toISOString().replace(/T/, ' ').replace(/\..+/, '');
사용.moment.js
, 를 사용할 수 있습니다.keepOffset
파라미터toISOString
:
toISOString(keepOffset?: boolean): string;
moment().toISOString(true)
이 문제에 대한 모멘트 js 솔루션은
var d = new Date(new Date().setHours(0,0,0,0));
m.add(m.utcOffset(), 'm')
m.toDate().toISOString()
// output "2019-07-18T00:00:00.000Z"
언급URL : https://stackoverflow.com/questions/10830357/javascript-toisostring-ignores-timezone-offset
'programing' 카테고리의 다른 글
Java에서 현재 날짜에 1개월을 추가하려면 어떻게 해야 하나요? (0) | 2023.01.15 |
---|---|
Vue-Router 언어 기반 루트프리픽스 (0) | 2023.01.15 |
regex는 정확히 n OR m 회 (0) | 2023.01.15 |
PHP: Internet Explorer 6, 7, 8, 또는 9의 경우 (0) | 2023.01.15 |
JUnit 테스트 케이스에서 MySQL을 실행하는 방법이 있습니까? (0) | 2023.01.15 |