자바 펼쳐의 날짜 구문 분석이 Safari와 Chrome에서 발행됩니다.
다음 코드가 있습니다.
var c = new Date(Date.parse("2011-06-21T14:27:28.593Z"));
console.log(c);
크롬에서는 콘솔에 날짜를 인쇄합니다. Safari에서는 실패합니다. 누가 처리하는 가장 좋은 방법은 무엇입니까?
실제로 Date.parse를 사용할 수 없습니다. 다음을 사용하는 것이 좋습니다.new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
분할을 분할하려는 시도 할 수 있습니다.
var s = '2011-06-21T14:27:28.593Z';
var a = s.split(/[^0-9]/);
//for (i=0;i<a.length;i++) { alert(a[i]); }
var d=new Date (a[0],a[1]-1,a[2],a[3],a[4],a[5] );
alert(s+ " "+d);
Date.parse
이 질문에 대한 다른 답변에 따라 나는 피하는 경향 이 있습니다. 가능한 방법은 아닌 것입니다.
대신 아래 기능과 같은 것을 사용했습니다. jQuery를 사용하여 배열을 숫자 배열로 매핑하지만 제거 / 변경하는 것은 매우 쉬운 방법입니다. 또한 동일한 기능 을 구문 분석 2007-01-09
하고 2007-01-09T09:42:00
사용할 수 있다고 생각하는 내용도 포함 합니다.
function dateFromString(str) {
var a = $.map(str.split(/[^0-9]/), function(s) { return parseInt(s, 10) });
return new Date(a[0], a[1]-1 || 0, a[2] || 1, a[3] || 0, a[4] || 0, a[5] || 0, a[6] || 0);
}
내 성적 문제는 Safari가 RFC 822 어떤 형식으로 나타나는 것을 읽는 방법을 모르기 때문에 발생했습니다. ISO 8601 형식을 사용 하여이 문제를 해결합니다. 날짜 형식을 제어 할 수있는 경우 Java의 SimpleDateFormat "yyyy-MM-dd'T'HH : mm : ss.sssXXX"를 사용하여이 작업을 수행했습니다. '2018-02-06T20 : 00 : 00.000 + 04:00 ' 사파리가 "2018-02-06T20 : 00 : 00.000 + 0400"을 읽을 수없는 이유가 무엇이든, 형식에 콜론이 없음을 확인하십시오.
// Works
var c = new Date("2018-02-06T20:00:00.000+04:00"));
console.log(c);
// Doesn't work
var c = new Date("2018-02-06T20:00:00.000+0400"));
console.log(c);
여러 브라우저에서 확인한 예, 사파리가 invalid date
. 그건 그렇고, 당신은 Date.parse
여기서 사용할 필요가 없습니다 new Date([datestring])
. Safari는 분명히 제공하는 날짜가 더 많은 형식을 요구합니다. '-'를 '/'로 바꾸면 T와 점 (.593Z) 뒤의 모든 항목을 제거하면 유효한 날짜가 제공됩니다. 이 코드는 Safari에서 테스트되고 작동합니다.
var datestr = '2011-06-21T14:27:28.593Z'.split(/[-T.]/);
var safdat = new Date( datestr.slice(0,3).join('/')+' '+datestr[3] );
또는 사용 String.replace(...)
:
new Date("2016-02-17T00:05:01+0000".replace(/-/g,'/').replace('T',' ').replace(/(\..*|\+.*/,""))
나는 이것을 상쇄하기 위해 라이브러리를 사용하게된다.
http://zetafleet.com/blog/javascript-dateparse-for-iso-8601
해당 라이브러리가 포함하는 다음 코드를 사용하여 새 날짜를 만듭니다.
var date = new Date(Date.parse(datestring));
우리 프로젝트는 밀리 문제를 초 지정 확실하게 생각하지 않습니다.
다음으로 날짜를 구문 분석하기 위해 함수를 사용합니다. Chrome과 Safari 모두 잘 작동합니다.
function parseDate(date) {
const parsed = Date.parse(date);
if (!isNaN(parsed)) {
return parsed;
}
return Date.parse(date.replace(/-/g, '/').replace(/[a-z]+/gi, ' '));
}
console.log(parseDate('2017-02-09T13:22:18+0300')); // 1486635738000 time in ms
나는 그것을 자르고 그렇게 파싱하여 변환 된 날짜를 시도했고, 사파리와 ios와 잘 작동한다.
var dateString = "2016-01-22T08:18:10.000+0000";
var hours = parseInt(dateString.split("+")[1].substr("0","2"));
var mins = parseInt(dateString.split("+")[1].substr("2"));
var date = new Date(dateString.split("+")[0]);
date.setHours(date.getHours()-hours);
date.setMinutes(date.getMinutes()-mins);
날짜 문자열 끝에 'Z'를 사용하는 대신 로컬 클라이언트 시간대 오프셋을 추가 할 수 있습니다. 이를 생성하는 방법이 필요할 것입니다.
let timezoneOffset = () => {
let date = new Date(),
timezoneOffset = date.getTimezoneOffset(),
hours = ('00' + Math.floor(Math.abs(timezoneOffset/60))).slice(-2),
minutes = ('00' + Math.abs(timezoneOffset%60)).slice(-2),
string = (timezoneOffset >= 0 ? '-' : '+') + hours + ':' + minutes;
return string;
}
따라서 최종 결과는 다음과 같습니다.
var c = new Date("2011-06-21T14:27:28.593" + timezoneOffset());
다른 사람들이 게시 한 것보다 더 강력한 ISO 8601 파서가 있습니다. 주 형식은 처리하지 않지만 다른 모든 유효한 ISO 8601 날짜를 모든 브라우저에서 일관되게 처리해야합니다.
function newDate(value) {
var field = value.match(/^([+-]?\d{4}(?!\d\d\b))(?:-?(?:(0[1-9]|1[0-2])(?:-?([12]\d|0[1-9]|3[01]))?)(?:[T\s](?:(?:([01]\d|2[0-3])(?::?([0-5]\d))?|24\:?00)([.,]\d+(?!:))?)?(?::?([0-5]\d)(?:[.,](\d+))?)?([zZ]|([+-](?:[01]\d|2[0-3])):?([0-5]\d)?)?)?)?$/) || [];
var result = new Date(field[1], field[2] - 1 | 0, field[3] || 1, field[4] | 0, field[5] | 0, field[7] | 0, field[8] | 0)
if (field[9]) {
result.setUTCMinutes(result.getUTCMinutes() - result.getTimezoneOffset() - ((field[10] * 60 + +field[11]) || 0));
}
return result;
}
console.log(newDate('2011-06-21T14:27:28.593Z'));
console.log(newDate('1970-12-31T06:00Z'));
console.log(newDate('1970-12-31T06:00-1200'));
'ProgramingTip' 카테고리의 다른 글
Objective-C에서 변수 인수 메서드를 만드는 방법 (0) | 2020.12.14 |
---|---|
CodeIgniter- 쿼리에 대한 ORDER BY (0) | 2020.12.14 |
Json.NET에서 키 목록을 얻으려면 어떻게해야합니까? (0) | 2020.12.14 |
setTimeout을 사용할 때 메소드가 즉시 실행되는 이유는 무엇입니까? (0) | 2020.12.14 |
각 열 이름에 접미사 (또는 접두사)를 추가하는 방법은 무엇입니까? (0) | 2020.12.13 |