JavaScript에서 ISO 8601 형식의 문자열을 출력하려면 어떻게 해야 합니까?
는 나나 a a a가 있다Date
물건.다음 스니펫 부분을 어떻게 렌더링해야 합니까?
<abbr title="2010-04-02T14:12:07">A couple days ago</abbr>
나는 다른 도서관에서 "단어로 된 상대 시간" 부분을 가지고 있다.
다음을 시도했습니다.
function isoDate(msSinceEpoch) {
var d = new Date(msSinceEpoch);
return d.getUTCFullYear() + '-' + (d.getUTCMonth() + 1) + '-' + d.getUTCDate() + 'T' +
d.getUTCHours() + ':' + d.getUTCMinutes() + ':' + d.getUTCSeconds();
}
하지만 그 결과 다음과 같이 됩니다.
"2010-4-2T3:19"
다음과 같은 함수가 이미 있습니다.
var date = new Date();
date.toISOString(); //"2011-12-19T15:28:46.493Z"
만약 당신이 그것을 지원하지 않는 브라우저에 접속되어 있다면, 나는 당신을 보호한다:
if (!Date.prototype.toISOString) {
(function() {
function pad(number) {
var r = String(number);
if (r.length === 1) {
r = '0' + r;
}
return r;
}
Date.prototype.toISOString = function() {
return this.getUTCFullYear() +
'-' + pad(this.getUTCMonth() + 1) +
'-' + pad(this.getUTCDate()) +
'T' + pad(this.getUTCHours()) +
':' + pad(this.getUTCMinutes()) +
':' + pad(this.getUTCSeconds()) +
'.' + String((this.getUTCMilliseconds() / 1000).toFixed(3)).slice(2, 5) +
'Z';
};
}());
}
console.log(new Date().toISOString())
주의: 이 답변은 2022-03년 현재도 여전히 지지를 받고 있습니다.moment.js 라이브러리는 더 이상 사용되지 않습니다.Luxon과 Day.js의 두 가지 주요 대안이 있으며, 그 외는 폐지 링크에 기재되어 있습니다.
룩손
룩슨은 모멘트의 진화라고 생각할 수 있다.이 책은 모먼트의 오랜 기고자인 아이작 캠브론이 집필했다.Luxon의 존재 이유 및 Luxon 문서의 For Moment 사용자 페이지를 참조하십시오.
로케일:국제 표준 시간대:제공된 국제어
day.js
Day.js는 유사한 API를 사용하여 Moment.js를 최소화할 수 있도록 설계되었습니다.드롭인 대체는 아니지만, Moment의 API 사용에 익숙하고 빠르게 작업을 진행하려면 Day.js 사용을 고려해 보십시오.
로케일:시간대를 개별적으로 가져올 수 있는 사용자 지정 데이터 파일:플러그인 경유로 제공된 인터L
사이즈 차이 때문에 Day.js를 사용하고 있습니다만, Luxon이 다루기 쉽습니다.
웹상의 거의 모든 to-ISO 메서드는 문자열을 출력하기 전에 "Z"ulu time(UTC)"에 변환을 적용하여 시간대 정보를 폐기합니다.브라우저의 네이티브 .toIString()도 시간대 정보를 삭제합니다.
이것에 의해, 서버 또는 수신자는, 송신자의 타임 존 정보를 취득하면서, ISO 의 완전한 날짜를 항상 Zulu 시각 또는 필요한 타임 존으로 변환할 수 있기 때문에, 귀중한 정보를 폐기할 수 있습니다.
제가 찾은 최고의 솔루션은 Moment.js javascript 라이브러리를 사용하고 다음 코드를 사용하는 것입니다.
표준 시간대 정보 및 밀리초를 사용하여 현재 ISO 시간을 가져오려면 다음과 같이 하십시오.
now = moment().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T20:11:11.234+0100"
now = moment().utc().format("YYYY-MM-DDTHH:mm:ss.SSSZZ")
// "2013-03-08T19:11:11.234+0000"
now = moment().utc().format("YYYY-MM-DDTHH:mm:ss") + "Z"
// "2013-03-08T19:11:11Z" <- better use the native .toISOString()
표준 시간대 정보를 포함하지만 밀리초 없이 네이티브 JavaScript Date 개체의 ISO 시간을 가져오려면 다음과 같이 하십시오.
var current_time = Date.now();
moment(current_time).format("YYYY-MM-DDTHH:mm:ssZZ")
이를 Date.js와 조합하여 Date와 같은 함수를 얻을 수 있습니다.그 결과를 모멘트로 전달할 수 있는 today()입니다.
이와 같은 형식의 날짜 문자열은 JSON을 지원하므로 데이터베이스에 저장하기에 적합합니다.Python과 C#은 그것을 좋아하는 것 같다.
https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Date 페이지의 마지막 예를 참조하십시오.
/* Use a function for the exact format desired... */
function ISODateString(d) {
function pad(n) {return n<10 ? '0'+n : n}
return d.getUTCFullYear()+'-'
+ pad(d.getUTCMonth()+1)+'-'
+ pad(d.getUTCDate())+'T'
+ pad(d.getUTCHours())+':'
+ pad(d.getUTCMinutes())+':'
+ pad(d.getUTCSeconds())+'Z'
}
var d = new Date();
console.log(ISODateString(d)); // Prints something like 2009-09-28T19:03:12Z
질문한 것은 ISO 포맷의 정밀도가 저하된 것이었습니다.Voila:
new Date().toISOString().slice(0, 19) + 'Z'
// '2014-10-23T13:18:06Z'
후행 Z가 필요하다고 가정하고, 그렇지 않으면 생략합니다.
가장 짧지만 Internet Explorer 8 이전 버전에서는 지원되지 않습니다.
new Date().toJSON()
IE7을 지원할 필요가 없는 경우, 다음은 훌륭하고 간결한 해킹입니다.
console.log(
JSON.parse(JSON.stringify(new Date()))
)
일반적으로 UTC 날짜는 고객이 머릿속으로 변환하는 것을 좋아하지 않기 때문에 표시하지 않습니다.로컬 ISO 날짜를 표시하려면 다음 함수를 사용합니다.
function toLocalIsoString(date, includeSeconds) {
function pad(n) { return n < 10 ? '0' + n : n }
var localIsoString = date.getFullYear() + '-'
+ pad(date.getMonth() + 1) + '-'
+ pad(date.getDate()) + 'T'
+ pad(date.getHours()) + ':'
+ pad(date.getMinutes()) + ':'
+ pad(date.getSeconds());
if(date.getTimezoneOffset() == 0) localIsoString += 'Z';
return localIsoString;
};
위의 함수는 시간대 오프셋 정보를 생략하고 있기 때문에(현지시각이 UTC인 경우는 제외), 아래 함수를 사용하여 로컬 오프셋을 한 곳에 표시합니다.매번 오프셋을 표시하려면 위의 함수 결과에 출력을 추가할 수도 있습니다.
function getOffsetFromUTC() {
var offset = new Date().getTimezoneOffset();
return ((offset < 0 ? '+' : '-')
+ pad(Math.abs(offset / 60), 2)
+ ':'
+ pad(Math.abs(offset % 60), 2))
};
toLocalIsoString
사용하다pad
필요한 경우라면 거의 모든 패드 기능과 동일하게 동작하지만, 완성도를 위해 다음과 같이 사용하고 있습니다.
// Pad a number to length using padChar
function pad(number, length, padChar) {
if (typeof length === 'undefined') length = 2;
if (typeof padChar === 'undefined') padChar = '0';
var str = "" + number;
while (str.length < length) {
str = padChar + str;
}
return str;
}
toISOString의 문제는 datetime을 "Z"로만 제공한다는 것입니다.
ISO-8601은 2016-07-16T19:20:30+5:30(UTC 시간대가 앞서는 경우) 및 2016-07-16T19:20:30-01:00(UTC 시간대가 뒤지는 경우)와 같은 형식으로 시간과 분 단위로 날짜 시간을 정의합니다.
특히 몇 줄의 코드로 얻을 수 있는 경우, 이러한 작은 태스크에 다른 플러그인인 moment.js를 사용하는 것은 좋은 생각이 아니라고 생각합니다.
시간대 오프셋이 시간 및 분 단위로 지정되면 datetime 문자열에 추가할 수 있습니다.
블로그에 글을 올렸습니다.http://usefulangle.com/post/30/javascript-get-date-time-with-offset-hours-minutes
var timezone_offset_min = new Date().getTimezoneOffset(),
offset_hrs = parseInt(Math.abs(timezone_offset_min / 60)),
offset_min = Math.abs(timezone_offset_min % 60),
timezone_standard;
if (offset_hrs < 10)
offset_hrs = '0' + offset_hrs;
if (offset_min > 10)
offset_min = '0' + offset_min;
// getTimezoneOffset returns an offset which is positive if the local timezone is behind UTC and vice-versa.
// So add an opposite sign to the offset
// If offset is 0, it means timezone is UTC
if (timezone_offset_min < 0)
timezone_standard = '+' + offset_hrs + ':' + offset_min;
else if (timezone_offset_min > 0)
timezone_standard = '-' + offset_hrs + ':' + offset_min;
else if (timezone_offset_min == 0)
timezone_standard = 'Z';
// Timezone difference in hours and minutes
// String such as +5:30 or -6:00 or Z
console.log(timezone_standard);
'T' 뒤에 '+'가 누락되어 있습니다.
isoDate: function(msSinceEpoch) {
var d = new Date(msSinceEpoch);
return d.getUTCFullYear() + '-' + (d.getUTCMonth() + 1) + '-' + d.getUTCDate() + 'T'
+ d.getUTCHours() + ':' + d.getUTCMinutes() + ':' + d.getUTCSeconds();
}
할 수 있을 거예요.
선행 0 의 경우는, 여기서 이것을 사용할 수 있습니다.
function PadDigits(n, totalDigits)
{
n = n.toString();
var pd = '';
if (totalDigits > n.length)
{
for (i=0; i < (totalDigits-n.length); i++)
{
pd += '0';
}
}
return pd + n.toString();
}
다음과 같이 사용합니다.
PadDigits(d.getUTCHours(),2)
function timeStr(d) {
return ''+
d.getFullYear()+
('0'+(d.getMonth()+1)).slice(-2)+
('0'+d.getDate()).slice(-2)+
('0'+d.getHours()).slice(-2)+
('0'+d.getMinutes()).slice(-2)+
('0'+d.getSeconds()).slice(-2);
}
매우 적은 코드로 낮은 출력을 얻을 수 있었습니다.
var ps = new Date('2010-04-02T14:12:07') ;
ps = ps.toDateString() + " " + ps.getHours() + ":"+ ps.getMinutes() + " hrs";
출력:
Fri Apr 02 2010 19:42 hrs
이 작은 확장자를 사용해서Date
- http://blog.stevenlevithan.com/archives/date-time-format
var date = new Date(msSinceEpoch);
date.format("isoDateTime"); // 2007-06-09T17:46:21
function getdatetime() {
d = new Date();
return (1e3-~d.getUTCMonth()*10+d.toUTCString()+1e3+d/1)
.replace(/1(..)..*?(\d+)\D+(\d+).(\S+).*(...)/,'$3-$1-$2T$4.$5Z')
.replace(/-(\d)T/,'-0$1T');
}
Stack Overflow에 대한 기본을 (다른 Stack Exchange 코드 골프의 일부였던 것 같습니다) 찾아서 Internet Explorer 10 이전 버전에서도 작동하도록 개선했습니다.못생겼지만 그 일을 해낼 수 있어요.
Sean의 훌륭하고 간결한 답변을 설탕과 현대적인 구문과 함께 확장하려면:
// date.js
const getMonthName = (num) => {
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Oct', 'Nov', 'Dec'];
return months[num];
};
const formatDate = (d) => {
const date = new Date(d);
const year = date.getFullYear();
const month = getMonthName(date.getMonth());
const day = ('0' + date.getDate()).slice(-2);
const hour = ('0' + date.getHours()).slice(-2);
const minutes = ('0' + date.getMinutes()).slice(-2);
return `${year} ${month} ${day}, ${hour}:${minutes}`;
};
module.exports = formatDate;
그럼 예를 들어.
import formatDate = require('./date');
const myDate = "2018-07-24T13:44:46.493Z"; // Actual value from wherever, eg. MongoDB date
console.log(formatDate(myDate)); // 2018 Jul 24, 13:44
언급URL : https://stackoverflow.com/questions/2573521/how-do-i-output-an-iso-8601-formatted-string-in-javascript
'programing' 카테고리의 다른 글
도커 설정 변경 후 MariaDB 데이터가 손실됩니까? (0) | 2022.09.12 |
---|---|
다른 열의 순서를 기준으로 그룹에서 값 하나를 선택합니다. (0) | 2022.09.12 |
MariaDB 키별 값 개수 선택 (0) | 2022.09.12 |
uint32, int32, uint64, int64 등의 유형이 stdlib 헤더에 정의되어 있습니까? (0) | 2022.09.12 |
Java는 정수를 little endian 또는 big endian으로 읽습니까? (0) | 2022.09.12 |