JavaScript에서 날짜 개체를 수신하기 위해 JSON을 구문 분석하는 방법은 무엇입니까?
다음과 같은 JSON이 있습니다.
\/Date(1293034567877)\/
그 결과입니다.NET 코드:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
여기서 제가 직면한 문제는 JavaScript에서 Date 객체를 어떻게 작성하느냐입니다.제가 찾을 수 있었던 것은 믿을 수 없는 regex 솔루션(많은 버그가 포함되어 있습니다)뿐이었습니다.
이것이 모두 자바스크립트에 있기 때문에 우아한 솔루션이 없다는 것은 믿기 어렵습니다.즉, 자바스크립트 코드라고 생각되는 JSON(JavaScript Object Notation)을 읽으려고 하는 자바스크립트 코드입니다.현재로서는 JavaScript가 잘 되지 않는 것이 판명되었습니다.
또, 시큐러티 위협이라고 지적되고 있는 것 외에, 기능하지 않는 평가 솔루션도 몇개인가 있었습니다.
정말 우아하게 할 수 있는 방법은 없을까?
같은 질문이지만 정답은 없습니다.
ASP " with GWTGWT" NET JSON " "
이 함수는 옵션인 DateTime 리바이버 함수를 받아들입니다.다음과 같은 기능을 사용할 수 있습니다.
dateTimeReviver = function (key, value) {
var a;
if (typeof value === 'string') {
a = /\/Date\((\d*)\)\//.exec(value);
if (a) {
return new Date(+a[1]);
}
}
return value;
}
그럼 전화해요
JSON.parse(somejsonstring, dateTimeReviver);
데이트 상대는 잘 될 거야
JSON을 사용하다@@jandy를 .DateTime
RFC 1123 날짜 스트링을 송신해 ToString("r")
에서 "Unix-epoch"를 할 수 입니다.Date
.
var date = new Date(parseInt(jsonDate.substr(6)));
그의 말처럼:기판 함수는 "/Date()" 부분을 삭제하고 구문 분석Int 함수는 정수를 가져오고 마지막에 "/"를 무시합니다. 결과 번호는 날짜 생성자로 전달됩니다.
또 다른 옵션은 단순히 JavaScript가 쉽게 읽을 수 있도록 ASP 측에서 정보를 적절하게 포맷하는 것입니다.데이트에 대해 다음 사항을 고려해 보십시오.
DateTime.Now()
그러면 다음과 같은 형식이 반환됩니다.
7/22/2008 12:11:04 PM
을 JavaScript에 하면, 「JavaScript」가 됩니다.Date
컨스트럭터는 다음과 같습니다.
var date = new Date('7/22/2008 12:11:04 PM');
''date
츠키다
Tue Jul 22 2008 12:11:04 GMT-0700 (Pacific Daylight Time)
이 형식을 수 .DateTime
를 임의의 하거나 JS에 한다.Date
컨스트럭터가 받아들입니다.
JSON에서 JavaScript 스타일의 ISO-8601 날짜를 사용하는 경우 MDN에서 다음을 사용할 수 있습니다.
const jsonDate = (new Date()).toJSON();
const backToDate = new Date(jsonDate);
console.log(jsonDate); //2015-10-26T07:46:36.611Z
ISO-8601 날짜 문자열을 작성하려면:
myDate.toISOString()
JavaScript에서 JSON 날짜를 일반 날짜 형식으로 변환할 수 있습니다.
var date = new Date(parseInt(jsonDate.substr(6)));
문제:
new Date(1293034567877);
2010년 12월 22일(수) 16:16:07 GMT+0000(GMT 표준시)이 반환됩니다.
아니면 번호를 꺼내야 하나요?
이게 아주 오래된 줄거리인 건 알지만, 저처럼 우연히 마주치는 사람들을 돕기 위해 이 글을 올리고 싶습니다.
서드파티 스크립트를 사용할 필요가 없다면 moment, js를 사용할 수 있습니다.그러면 .format()을 사용하여 원하는 형식으로 포맷할 수 있습니다.
데이트는 항상 악몽이야.당신의 오래된 질문에 대답하는 것이 아마도 가장 우아한 방법일 것입니다.
eval(("new " + "/Date(1455418800000)/").replace(/\//g,""))
eval에서는 문자열을 javascript 코드로 변환합니다.그런 다음 "/"를 제거합니다. 치환 함수는 정규 표현입니다.새로운 것으로 시작할 때 문장에서는 다음과 같은 특징이 있습니다.
new Date(1455418800000)
제가 오래전에 사용하기 시작한 것은 긴 값은 틱으로 나타내고 있습니다.왜일까요?모든 서버 또는 모든 클라이언트에서 날짜가 어떻게 구성되는지 현지화 및 생각하지 마세요.사실 데이터베이스에서도 사용하고 있습니다.
아마 이 답변에는 꽤 늦었지만, 여기에 있는 누구라도 도울 수 있을 것이다.
얻는 후, NET 을 사용합니다.JsonResult
★★★★
JsonConvert.SerializeObject(/* JSON OBJECT TO SEND TO VIEW */);
됩니다.javascript
:
JSON.parse(/* Converted JSON object */)
Ajax 콜의 경우:
var request = $.ajax({ url: "@Url.Action("SomeAjaxAction", "SomeController")", dataType: "json"});
request.done(function (data, result) { var safe = JSON.parse(data); var date = new Date(safe.date); });
(Once)JSON.parse
를 JSON에 할 수 .new Date
JsonConvert
.ISO 타임인스턴스를 만듭니다.
AngularJS 。 날짜 NET JSON »/Date(xxxxxxxxxxxxx)/
★★★★★★★★★★★★★...
는 ISO 8601을 것이 했습니다.Date
★★★★★★★★★★★★...
ASP의 예를 다음에 나타냅니다.NET MVC 코드..
return Json(new {
date : DateTime.Now.ToString("O") //ISO 8601 Angular understands this format
});
는 는 i i는노노 i i i i i.RFC 1123
★★★★★★★★★★★★★★★★★★★★★★★★★★Angular (각) (날짜) (날짜) (끈) (끈) (각) (각) (날짜) (날짜) (날짜) (날짜) (끈)
return Json(new {
date : DateTime.Now.ToString("R") //RFC 1123 Angular won't parse this
});
안 써봤어요.이런 건 인터넷이야.다음과 같은 것을 인쇄할 수 있으면 도움이 될 것입니다.
JSON 문자열을 다른 방법으로 해석하거나 사용자가 JSON 파서를 내장한 최신 브라우저만 사용할 것으로 예상하는 경우를 제외하고 서버에서 출력되는 JSON 문자열을 실제 JSON 개체로 해석하려면 JS 프레임워크 또는 JSON2를 사용해야 합니다.
// JSON received from server is in string format
var jsonString = '{"date":1251877601000}';
//use JSON2 or some JS library to parse the string
var jsonObject = JSON.parse( jsonString );
//now you have your date!
alert( new Date(jsonObject.date) );
Firefox 3.5 및 Internet Explorer 8과 같은 최신 브라우저에는 JSON을 구문 분석하는 특수 기능이 포함되어 있습니다.네이티브 브라우저 지원은 eval()보다 효율적이고 안전하기 때문에 다음 ECMAScript 표준에 네이티브 JSON 지원이 포함될 것으로 예상됩니다.[6]
function parseJsonDate(jsonDate) {
var fullDate = new Date(parseInt(jsonDate.substr(6)));
var twoDigitMonth = (fullDate.getMonth() + 1) + ""; if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth;
var twoDigitDate = fullDate.getDate() + ""; if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate;
var currentDate = twoDigitMonth + "/" + twoDigitDate + "/" + fullDate.getFullYear();
return currentDate;
};
Callum이 언급한 바와 같이 가장 좋은 방법은 컨트롤러 메서드를 Json Result가 아닌 string으로 변경하는 것입니다.
public string GetValues()
{
MyObject.DateFrom = DateTime.Now;
return JsonConvert.SerializeObject(MyObject);
}
아약스 방법에서는 이런 것을 할 수 있습니다.
$.ajax({
url: "/MyController/GetValues",
type: "post",
success: function (data) {
var validData = JSON.parse(data);
//if you are using datepicker and you want set a format
$("#DateFrom").val($.datepicker.formatDate("dd/mm/yy", new Date(validData.DateFrom)));
// if you want the date as returned
$("#DateFrom").val(new Date(validData.DateFrom))
}
});
평가 기능을 사용하면 앞과 뒤에 있는 슬래시를 제거할 수 있습니다.
var date1 = "/Date(25200000)/"
eval("new " + date1.substring(1, date1.length - 1));
1970년 1월 1일 목요일 00:00:00 GMT-0700 (미국 산악 표준시)
외부 API가 이러한 형식의 날짜를 제공하는 데 문제가 있었습니다. UTC 차이 정보에도 문제가 있었습니다./Date(123232313131+1000)/
나는 그것을 돌릴 수 있었다.Date
다음 코드를 가진 객체
var val = '/Date(123232311-1000)/';
var pattern = /^\/Date\([0-9]+((\+|\-)[0-9]+)?\)\/$/;
var date = null;
// Check that the value matches /Date(123232311-1000)/ format
if (pattern.test(val)) {
var number = val.replace('/Date(', '',).replace(')/', '');
if (number.indexOf('+') >= 0) {
var split = number.split('+');
number = parseInt(split[0]) + parseInt(split[1]);
} else if (number.indexOf('-') >= 0) {
var split = number.split('-');
number = parseInt(split[0]) - parseInt(split[1]);
} else {
number = parseInt(number);
date = new Date(number);
}
}
//
// formats a .net date into a javascript compatible date
//
function FormatJsonDate(jsonDt)
{
var MIN_DATE = -62135578800000; // const
var date = new Date(parseInt(jsonDt.substr(6, jsonDt.length-8)));
return date.toString() == new Date(MIN_DATE).toString() ? "" : (date.getMonth() + 1) + "\\" + date.getDate() + "\\" + date.getFullYear();
}
function parseJsonDate(jsonDate) {
var fullDate = new Date(parseInt(jsonDate.substr(6)));
var twoDigitMonth = (fullDate.getMonth() + 1) + ""; if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth;
var twoDigitDate = fullDate.getDate() + ""; if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate;
var currentDate = twoDigitMonth + "/" + twoDigitDate + "/" + fullDate.getFullYear();
return currentDate;
};
//이 기능을 사용하다
var objDate=parseJsonDate("\/Date(1443812400000)\/");
alert(objDate);
언급URL : https://stackoverflow.com/questions/4511705/how-to-parse-json-to-receive-a-date-object-in-javascript
'programing' 카테고리의 다른 글
WooCommerce 4+에서 제품에 커스텀 재고 상태를 추가하는 방법 (0) | 2023.03.12 |
---|---|
Oracle PL/SQL에 문자열을 분할하는 기능이 있습니까? (0) | 2023.03.12 |
문서에서 일부 필드를 제외하는 방법 (0) | 2023.03.12 |
MongoDB :: Mongo ID는 컬렉션 전체에서 고유합니까? (0) | 2023.03.12 |
WooCommerce 갤러리에서 피쳐 이미지 삭제 (0) | 2023.03.12 |