[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();