asp.net 에서 DateTime의 Javascript 직렬화는 Javascript 날짜 객체를 제공하지 않습니까?
DateTime을 json으로 구문 분석할 때.Net 문자열을 반환합니다(예:"\/Date(1249335194272)\/"
. jsDate 객체 생성자가 문자열로 감싸지 않도록 반환하려면 어떻게 해야 합니까?
// js server code
var dteNow = <%= jsonDateNow %>;
// js rendered code
var dteNow = "\/Date(1249335477787)\/";
// C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.Script.Serialization;
using System.Web.UI.WebControls;
namespace testing{
public partial class iTaxPrep : System.Web.UI.Page
{
protected string jsonDateNow;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
jsonDateNow = new JavaScriptSerializer().Serialize(DateTime.Now);
}
}
}
}
이것은 JSON과 관련하여 알려진 제한 사항입니다.이 답변은 특히 다음과 같은 도움이 될 수 있습니다.
value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10));
이것은 효과가 있는 것 같습니다(아이디어에 대해 Chris S에게 감사합니다).C#에서 치환을 수행하여 날짜 객체 주변에서 문자열 래퍼를 제거합니다;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.Script.Serialization;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.UI.WebControls;
namespace test
{
[ScriptService]
public partial class testing: System.Web.UI.Page
{
protected string strCaseID;
protected string jsonCase;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
strCaseID =Tools.GetQueryObject("id");
// get a complex object with dates, string, arrays etc.
jsonESHACase = new JavaScriptSerializer().Serialize(objCase.Get(strCaseID ))
.Replace("\"\\/Date(", "new Date(").Replace(")\\/\"", ")");
}
}
}
}
..따옴표를 제거하고 날짜에 새 접두사를 추가하면 이제 이 js가 작동합니다.만세!
testCase= <%= jsonESHACase %>;
if (testCase) {
document.write(testCase["ClosingDate"].format("MM dd yyyy"));
}
다음과 같은 간단한 자바스크립트 조작:
function(param){
var date = new Date(parseInt(param.substr(6)));
return date;
}
JSON 날짜를 함수에 매개 변수로 전달하면 Javascript 날짜가 반환됩니다.
약간의 문자열 조작과 평가를 통해 Date 객체를 생성할 수 있습니다.
var dteNow = "\/Date(1249335477787)\/";
var dteObj = eval("new " + dteNow.replace(/\//g,""));
사용해 볼 수 있습니다.
"MyField: " + string.Format("(function(y,m,d,h,mm,s){{var d=new Date(Date.UTC(y,m-1,d,h,mm,s));return d;}})({0},{1},{2},{3},{4},{5})", d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second);
이것은 FF와 IE에서 작동하는 것 같습니다.
ReGEx를 사용하여 약간 더 간단한 문자열 정리:
var myDate = "\\/Date(1508821200000)\/";
var jsDate = new Date(parseInt(myDate.replace(/\D/g, '')));
Date.parse 및 DateTime을 사용하는 옵션이 있습니다.문자열로:
var lowerBound = new Date(Date.parse("@Model.LowerBound.ToString("MMMM dd, yyyy")"));
시간이 필요한 경우 다음 사항을 고려하십시오.나는 이것이 더 새로운 자바스크립트 사양에 의존한다고 생각합니다.
var lowerBound = new Date(Date.parse("@Model.LowerBound.ToUniversalTime().ToString("s")"));
jQuery를 사용하는 옵션은 다음과 같습니다. (여기에 시간을 추가할 수 있는 방법이 있을 것입니다.)
var lowerBound = $.datepicker.parseDate('yy-mm-dd', "@Model.LowerBound.ToString("yyyy-MM-dd")");
이것이 이 문제를 해결하는 데 유용한 기술이라는 것을 알게 되었습니다.
http://icanmakethiswork.blogspot.co.uk/2012/04/beg-steal-or-borrow-decent-javascript.html
DateTimes를 ISO 8601 날짜 문자열로 직렬화하여 JavaScript Date 생성자와 함께 사용할 수 있으며 사람이 읽을 수 있다는 이점이 있습니다.
jsonDateNow = String.Format("Date({0},{1},{2})", Date().Now.getYear(), Date().Now.getMonth() -1, Date().Now.getDay());
이 예제는 작동합니다.
JavaScriptSerializer serializer = new JavaScriptSerializer();
DateTime dt = DateTime.Now;
DateTime dt1 = dt;
string jsonDateNow = serializer.Serialize(dt1);
언급URL : https://stackoverflow.com/questions/1224793/javascript-serialization-of-datetime-in-asp-net-is-not-giving-a-javascript-date
'source' 카테고리의 다른 글
라인이 삭제/제거되었을 때 커밋을 찾는 방법은 무엇입니까? (0) | 2023.09.04 |
---|---|
마우스 이벤트 없이 jQuery에서 마우스 위치를 얻는 방법은 무엇입니까? (0) | 2023.09.04 |
jQuery ajax 호출 측면에서 php 에코와 반환 간의 차이 (0) | 2023.09.04 |
MYSQL: 테이블 만들기의 인덱스 키워드 및 사용 시기 (0) | 2023.09.04 |
'--rm' 플래그는 무엇을 하고 있습니까? (0) | 2023.09.04 |