programing

JavaScript에서 날짜 개체를 수신하기 위해 JSON을 구문 분석하는 방법은 무엇입니까?

linuxpc 2023. 3. 12. 10:32
반응형

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.

Roy Tinker의 답변은 다음과 같습니다.

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 DateJsonConvert.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) );

Wiki 링크

Firefox 3.5 및 Internet Explorer 8과 같은 최신 브라우저에는 JSON을 구문 분석하는 특수 기능이 포함되어 있습니다.네이티브 브라우저 지원은 eval()보다 효율적이고 안전하기 때문에 다음 ECMAScript 표준에 네이티브 JSON 지원이 포함될 것으로 예상됩니다.[6]


JSON2 파일에 대한 링크

라이브 예시

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

반응형