[jquery] Microsoft JSON 날짜를 어떻게 형식화합니까?

jQuery를 사용 하여 Ajax 에서 첫 번째 균열을 겪고 있습니다. 내 데이터를 내 페이지로 가져오고 있지만 날짜 데이터 형식에 대해 반환되는 JSON 데이터에 문제가 있습니다. 기본적으로 다음과 같은 문자열이 다시 나타납니다.

/Date(1224043200000)/

완전히 새로운 사람부터 JSON까지-짧은 날짜 형식으로 어떻게 형식을 지정합니까? jQuery 코드 어딘가에서 처리해야합니까? 나는 성공없이 jQuery.UI.datepicker플러그인을 사용해 보았습니다 $.datepicker.formatDate().

참고 : 여기에 답변을 조합하여 사용하는 솔루션이 있습니다.

function getMismatch(id) {
  $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
      $("#AuthMerchId").text(result.AuthorizationMerchantId);
      $("#SttlMerchId").text(result.SettlementMerchantId);
      $("#CreateDate").text(formatJSONDate(Date(result.AppendDts)));
      $("#ExpireDate").text(formatJSONDate(Date(result.ExpiresDts)));
      $("#LastUpdate").text(formatJSONDate(Date(result.LastUpdateDts)));
      $("#LastUpdatedBy").text(result.LastUpdateNt);
      $("#ProcessIn").text(result.ProcessIn);
    }
  );

  return false;
}

function formatJSONDate(jsonDate) {
  var newDate = dateFormat(jsonDate, "mm/dd/yyyy");
  return newDate;
}

이 솔루션은 콜백 메소드에서 내 객체를 가져 와서 날짜 형식 라이브러리를 사용하여 페이지에 날짜를 올바르게 표시했습니다.



답변

eval()필요가 없습니다. 이것은 잘 작동합니다 :

var date = new Date(parseInt(jsonDate.substr(6)));

substr()함수는 /Date(부분을 꺼내고 parseInt()정수를 가져 와서 )/끝 부분을 무시합니다 . 결과 번호는 Date생성자에 전달됩니다 .


나는 기수를 의도적으로 생략했습니다 (에 대한 두 번째 인수 parseInt). 아래 내 의견을 참조하십시오 .

또한 Rory의 의견에 전적으로 동의합니다 . ISO-8601 날짜는이 오래된 형식보다 선호되므로이 형식은 일반적으로 새로운 개발에 사용해서는 안됩니다. ISO-8601 형식을 사용하여 날짜를 직렬화하는 훌륭한 대안 은 훌륭한 Json.NET 라이브러리를 참조하십시오 .

ISO-8601 형식의 JSON 날짜의 경우 문자열을 Date생성자에 전달하십시오 .

var date = new Date(jsonDate); //no ugly parsing needed; full timezone support


답변

이것을 사용하여 JSON에서 날짜를 얻을 수 있습니다.

var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));

그런 다음 JavaScript 날짜 형식 스크립트 (최소화 및 gzipped시 1.2KB)를 사용하여 원하는대로 표시 할 수 있습니다.


답변

Newtonsoft Json.NET을 사용하는 사람들 은 IE8의 네이티브 JSON, Firefox 3.5 및 Json.NET을 통해 수행하는 방법을 읽으 십시오 .

또한 Json.NET으로 작성된 날짜 형식을 변경하는 방법에 대한 문서가 유용합니다.
Json.NET으로 날짜 직렬화

너무 게으른 사람들을 위해 다음은 빠른 단계입니다. JSON에 느슨한 DateTime 구현이 있으므로를 사용해야합니다 IsoDateTimeConverter(). Json.NET 4.5부터 기본 날짜 형식은 ISO이므로 아래 코드는 필요하지 않습니다.

string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());

JSON은 다음과 같이 제공됩니다.

"fieldName": "2009-04-12T20:44:55"

마지막으로 ISO 날짜를 JavaScript 날짜로 변환하는 일부 JavaScript :

function isoDateReviver(value) {
  if (typeof value === 'string') {
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value);
      if (a) {
        var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
        return new Date(utcMilliseconds);
      }
  }
  return value;
}

나는 이것을 이렇게 사용했다

$("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName);


답변

원래 예 :

/Date(1224043200000)/  

기본 제공 JSON 직렬화를 사용하여 WCF REST를 통해 날짜를 보낼 때 WCF에서 사용하는 형식이 반영되지 않습니다. (적어도 .NET 3.5, SP1에서)

여기에 대한 답변이 도움이되었지만 시간대 GMT 오프셋이 WCF JSON에서 반환 된 숫자 (1970 년 이후)에 추가되는 것처럼 보이기 때문에 정규 표현식을 약간 편집해야합니다.

WCF 서비스에는 다음이 있습니다.

[OperationContract]
[WebInvoke(
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest
    )]
ApptVisitLinkInfo GetCurrentLinkInfo( int appointmentsId );

ApptVisitLinkInfo는 간단하게 정의됩니다 :

public class ApptVisitLinkInfo {
    string Field1 { get; set; }
    DateTime Field2 { get; set; }
    ...
}

“Field2″가 서비스에서 Json으로 리턴되면 값은 다음과 같습니다.

/Date(1224043200000-0600)/

시간대 오프셋이 값의 일부로 포함되어 있습니다.

수정 된 정규식 :

/\/Date\((.*?)\)\//gi

그것은 조금 더 열심이며 첫 번째 숫자뿐만 아니라 파렌 사이의 모든 것을 잡습니다. 결과 시간 sinze 1970과 시간대 오프셋을 모두 eval에 공급하여 날짜 개체를 얻을 수 있습니다.

대체를위한 JavaScript 행은 다음과 같습니다.

replace(/\/Date\((.*?)\)\//gi, "new Date($1)");


답변

반복하지 마십시오. 다음을 사용하여 날짜 변환 자동화 $.parseJSON()

게시물에 대한 답변은 수동 날짜를 JavaScript 날짜로 변환합니다. jQuery를 $.parseJSON()약간 확장 했으므로 지시 할 때 날짜를 자동으로 구문 분석 할 수 있습니다. 브라우저 (및 json2.js와 같은 라이브러리)의 기본 JSON 함수가 지원하는 /Date(12348721342)/ISO 형식 날짜 ( 2010-01-01T12.34.56.789Z) 뿐만 아니라 ASP.NET 형식 날짜 ( )도 처리 합니다.

어쨌든. 날짜 변환 코드를 반복해서 반복하지 않으려면 이 블로그 게시물 을 읽고 인생을 좀 더 편하게 해줄 코드를 얻는 것이 좋습니다 .


답변

JavaScript로 말하면

var thedate = new Date(1224043200000);
alert(thedate);

올바른 날짜임을 알 수 있으며 모든 프레임 워크를 사용하여 JavaScript 코드 어디에서나 사용할 수 있습니다.


답변

데모를 확인하려면 여기를 클릭하십시오

자바 스크립트 / jQuery

var = MyDate_String_Value = "/Date(1224043200000)/"
var value = new Date
            (
                 parseInt(MyDate_String_Value.replace(/(^.*\()|([+-].*$)/g, ''))
            );
var dat = value.getMonth() +
                         1 +
                       "/" +
           value.getDate() +
                       "/" +
       value.getFullYear();

결과 – “10/15/2008”