시간대 자바 스크립트없이 날짜 구문 분석 싶습니다. 나는 시도했다 : new Date(Date.parse(“2005-07-08T00:00:00+0000”)); 반환 금요일 7

JavaScript에서 시간대없이 날짜를 구문 분석하고 싶습니다. 나는 시도했다 :

new Date(Date.parse("2005-07-08T00:00:00+0000"));

반환 금요일 7 월 08 2005 02:00:00 GMT + 0200 (중부 유럽 일광 절약 시간)

new Date(Date.parse("2005-07-08 00:00:00 GMT+0000"));

동일한 결과를 반환

new Date(Date.parse("2005-07-08 00:00:00 GMT-0000"));

동일한 결과를 반환

시간을 파싱하고 싶습니다.

  1. 시간대가 없습니다.

  2. 생성자 Date.UTC 또는 new Date (년, 월, 일)를 호출하지 않습니다.

  3. 프로토 타입에 접근하지 않고 문자열을 Date 생성자에 간단하게 전달하십시오.

  4. 제품이 Date아닌 제품을 사용해야 합니다 String.



답변

날짜가 올바르게 구문 분석되었습니다. 현지 시간대로 변환하는 것은 toString입니다.

let s = "2005-07-08T11:22:33+0000";
let d = new Date(Date.parse(s));

// this logs for me 
// "Fri Jul 08 2005 13:22:33 GMT+0200 (Central European Summer Time)" 
// and something else for you

console.log(d.toString())

// this logs
// Fri, 08 Jul 2005 11:22:33 GMT
// for everyone

console.log(d.toUTCString())

Javascript Date 객체는 타임 스탬프입니다. 에포크 이후 몇 밀리 초 만 포함되어 있습니다. Date 객체에는 시간대 정보가 없습니다. 이 타임 스탬프가 나타내는 달력 날짜 (일, 분, 초)는 해석의 문제입니다.to...String 방법 ).

위의 예는 날짜가 올바르게 구문 분석되고 있음을 보여줍니다. 즉, 실제로는 GMT의 “2005-07-08T11 : 22 : 33″에 해당하는 양의 밀리 초를 포함합니다.


답변

나는 같은 문제가 있습니다. 날짜를 문자열로 가져옵니다 (예 : ‘2016-08-25T00 : 00 : 00’).하지만 정확한 시간의 Date 객체가 필요합니다. String을 객체로 변환하려면 getTimezoneOffset을 사용하십시오.

var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);

getTimezoneOffset()에테르 음수 또는 양수 값을 반환합니다. 세계의 모든 위치에서 작동하려면이 값을 빼야합니다.


답변

나는 같은 문제에 부딪 쳤고 내가 작업했던 레거시 프로젝트와 그들이이 문제를 어떻게 처리했는지에 대해 이상한 것을 기억했다. 나는 당시에 그것을 이해하지 못했고 문제를 직접 만날 때까지 실제로 신경 쓰지 않았습니다.

var date = '2014-01-02T00:00:00.000Z'
date = date.substring(0,10).split('-')
date = date[1] + '-' + date[2] + '-' + date[0]

new Date(date) #Thu Jan 02 2014 00:00:00 GMT-0600

어떤 이유로 든 ’01 -02-2014 ‘로 날짜를 전달하면 시간대가 0으로 설정되고 사용자의 시간대는 무시됩니다. 이것은 Date 클래스의 우연 일 수 있지만 얼마 전에 존재했으며 오늘 존재합니다. 그리고 브라우저 간 작동하는 것 같습니다. 직접 해보십시오.

이 코드는 시간대가 중요하지만 날짜를보고있는 사람이 소개 된 정확한 순간에 관심이없는 글로벌 프로젝트에서 구현됩니다.


답변

Date객체 자체가 어쨌든 시간대가 포함되며, 반환 된 결과는 기본 방법으로 문자열로 변환하는 효과입니다. 즉, 시간대가 없으면 날짜 객체 만들 수 없습니다 . 그러나 당신이 할 수있는 일은 Date자신의 것을 만들어서 객체 의 행동을 모방하는 것입니다. 그러나 이것은 moment.js 와 같은 라이브러리로 넘겨주는 것이 좋습니다 .


답변

간단한 해결책

const handler1 = {
  construct(target, args) {
    let newDate = new target(...args);
    var tzDifference = newDate.getTimezoneOffset();
    return new target(newDate.getTime() + tzDifference * 60 * 1000);
  }
};

Date = new Proxy(Date, handler1);


답변

자바 스크립트의 날짜는 내부를 단순하게 유지합니다. 날짜-시간 데이터는 UTC 유닉스 시대 (밀리 초 또는 ms)로 저장됩니다.

지구상의 어떤 시간대에서도 변경되지 않는 “고정 된”시간을 원한다면 UTC로 시간을 조정하여 현재 현지 시간대와 일치 시키십시오. 그리고 검색 할 때 현지 시간대에 상관없이 수정 한 UTC 시간을 저장 한 시간과 현지 시간대 오프셋을 추가하여 “고정 된”시간을 얻습니다.

날짜를 저장하려면 (ms)

toUTC(datetime) {
  const myDate = (typeof datetime === 'number')
    ? new Date(datetime)
    : datetime;

  if (!myDate || (typeof myDate.getTime !== 'function')) {
    return 0;
  }

  const getUTC = myDate.getTime();
  const offset = myDate.getTimezoneOffset() * 60000; // It's in minutes so convert to ms
  return getUTC - offset; // UTC - OFFSET
}

검색 / 표시 날짜 (ms)

fromUTC(datetime) {
  const myDate = (typeof datetime === 'number')
    ? new Date(datetime)
    : datetime;

  if (!myDate || (typeof myDate.getTime !== 'function')) {
    return 0;
  }

  const getUTC = myDate.getTime();
  const offset = myDate.getTimezoneOffset() * 60000; // It's in minutes so convert to ms
  return getUTC + offset; // UTC + OFFSET
}

그럼 당신은 할 수 있습니다 :

const saveTime = new Date(toUTC(Date.parse("2005-07-08T00:00:00+0000")));
// SEND TO DB....

// FROM DB...
const showTime = new Date(fromUTC(saveTime));


답변

이 코드를 사용할 수 있습니다

var stringDate = "2005-07-08T00:00:00+0000";
var dTimezone = new Date();
var offset = dTimezone.getTimezoneOffset() / 60;
var date = new Date(Date.parse(stringDate));
date.setHours(date.getHours() + offset);