문제

내가 있는 페이지는 현재 사용하여 datetime 마이크로포맷 를 표시하려면 타임스탬프,하지만 나만을 보여주는 사람이 읽을 수 있는 시간이 나의 자신의 시간이 지역:

<abbr class="published" title="2009-01-09T09:16:00-05:00">
Friday, January 9, 2009 at 9:16 am (EST)</abbr>

내가 무엇을 하려고 하는 것은 다시 작성 innerHTML 에 대한 abbr 태그를 것 같은 형식으로만 사용자의 로컬 시간대.그래서에 대한 독자 시애틀에 위으로 변환해야 합:

<abbr class="published" title="2009-01-09T09:16:00-05:00">
Friday, January 9, 2009 at 6:16 am (PST)</abbr>

나는 보았 자바스크립트 Date 객체, 할 수 있는 지역의 시간대에 오프셋이 있습니다.하지만 나는 몇 가지 문제점:

  1. 보이지 않는 쉬운 방법을 새로 만들려면 날짜 객체에서 ISO8601 타임 스탬프.(나는 수는 분석과 문자열 또는 regex 없는 경우 빠른 방법입니다.)

  2. 나는 보이지 않을 얻을 수있는 방법을 명명된 약어는 표준 시간대.예를 들어,에 대한 독자 시애틀에서 내가 원하는 시간을 갖"(PST)"추가 끝에,그렇지 않으면 그것은 명확하지 않는 사용자가는 타임 스탬프로 변환되었(는 경우에 특히 그는 빈번한 방문자가되었다는 사실에 익숙해지 시간 내에 있 EST).

도움이 되었습니까?

해결책

여기에는 코드는 구문 분석 ISO timestamp:

function isoDateStringToDate (datestr) {
  if (! this.re) {
    // The date in YYYY-MM-DD or YYYYMMDD format
    var datere = "(\\d{4})-?(\\d{2})-?(\\d{2})";
    // The time in HH:MM:SS[.uuuu] or HHMMSS[.uuuu] format
    var timere = "(\\d{2}):?(\\d{2}):?(\\d{2}(?:\\.\\d+)?)";
    // The timezone as Z or in +HH[:MM] or -HH[:MM] format
    var tzre = "(Z|(?:\\+|-)\\d{2}(?:\\:\\d{2})?)?";
    this.re = new RegExp("^" + datere + "[ T]" + timere + tzre + "$");
  }

  var matches = this.re.exec(datestr);
  if (! matches)
    return null;

  var year = matches[1];
  var month = matches[2] - 1;
  var day = matches[3];
  var hour = matches[4];
  var minute = matches[5];
  var second = Math.floor(matches[6]);
  var ms = matches[6] - second;
  var tz = matches[7];
  var ms = 0;
  var offset = 0;

  if (tz && tz != "Z") {
    var tzmatches = tz.match(/^(\+|-)(\d{2})(\:(\d{2}))$/);
    if (tzmatches) {
      offset = Number(tzmatches[2]) * 60 + Number(tzmatches[4]);
      if (tzmatches[1] == "-")
        offset = -offset;
    }
  }

  offset *= 60 * 1000;
  var dateval = Date.UTC(year, month, day, hour, minute, second, ms) - offset;

  return new Date(dateval);
}

불행하게도,그것은 처리하지 않 시간대에 약어를 하거나.당신을 수정해야"tzre"표현을 받아들이자,유일한 솔루션을 알고 나의 처리 시간대에 약어 자바 스크립트를 보이는 당신이 최신 상태로 유지에서 수동으로 이벤트 변경의 지역이 일광 절약 시간.

다른 팁

EcmaScript 공식화한 ISO-8601 스타일의 문자열로 느에 대한 자바스크립트 date.대부분의 JS 구현이 지원하지 않는 이것을 만들고,래퍼는 날짜 객체가 이 기능이 있습니다.설정하는 경우 타이틀 태그를 출력에서 UTC/GMT/Z/Zulu 오프셋을 사용할 수 있습니다,나 EcmaScript5 확장 JS 날짜 객체.

DateTime 값에 사용되는 클라이언트 사이드 스크립트,나는 일반적으로 하려고 항상 다음을 수행합니다.저장 날짜+간 UTC 구(심지어는 데이터베이스에서).전송 날짜 시간 UTC 영역입니다.에서 서버 클라이언트,사용하실 수 있습니다.toISOString()메소드는 위에서 링크가 있습니다.에서 서버-클라이언트는 이가 상대적으로 쉽습니다.

을 통해 jQuery(확장자를 가진):

$('.published').each(function(){
  var dtm = new Date(this.title);
  if (!isNaN(dtm)) {
    this.text(dtm.toString());
  }
});

내가 기억하지 않는 경우가에 대한 지원이 추가 비 utc 날짜에 입력,하지만 너무 어렵 계정한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top