C# asp.net中DateTime的Javascript序列化未提供Javascript日期对象?
在.Net中将DateTime解析为json时,它会返回一个字符串(即,C# asp.net中DateTime的Javascript序列化未提供Javascript日期对象?,c#,asp.net,javascript,datetime,serialization,C#,Asp.net,Javascript,Datetime,Serialization,在.Net中将DateTime解析为json时,它会返回一个字符串(即,“\/Date(1249335194272)\/”)。如何使它返回一个js日期对象构造函数而不是用字符串包装 // js server code var dteNow = <%= jsonDateNow %>; // js rendered code var dteNow = "\/Date(1249335477787)\/"; // C# using System; using System.Colle
“\/Date(1249335194272)\/”
)。如何使它返回一个js日期对象构造函数而不是用字符串包装
// 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);
}
}
}
}
//js服务器代码
var dteNow=;
//js呈现代码
var dteNow=“\/日期(1249335477787)\/”;
//C#
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.Script.Serialization;
使用System.Web.UI.WebControl;
命名空间测试{
公共部分类iTaxPrep:System.Web.UI.Page
{
受保护字符串jsonDateNow;
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
jsonDateNow=newJavaScriptSerializer().Serialize(DateTime.Now);
}
}
}
}
此示例有效
JavaScriptSerializer serializer = new JavaScriptSerializer();
DateTime dt = DateTime.Now;
DateTime dt1 = dt;
string jsonDateNow = serializer.Serialize(dt1);
这是一个使用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"));
}
testCase=;
if(测试用例){
编写(testCase[“ClosingDate”]格式(“MM dd yyyy”);
}
通过一点字符串操作和一个eval,您可以创建一个日期对象
var dteNow = "\/Date(1249335477787)\/";
var dteObj = eval("new " + dteNow.replace(/\//g,""));
我发现这是一种处理此问题的有用技术: 它允许将日期时间序列化为ISO 8601日期字符串,该字符串可与JavaScript日期构造函数一起使用,并具有可读性的优点。您可以尝试以下方法:
"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。简单的javascript操作如下:
function(param){
var date = new Date(parseInt(param.substr(6)));
return date;
}
将JSON date作为参数传递给函数,它将返回一个javascript日期。这里有一个使用date.parse和DateTime.ToString的选项:
var lowerBound = new Date(Date.parse("@Model.LowerBound.ToString("MMMM dd, yyyy")"));
如果你需要时间,考虑下面的内容。我相信这依赖于更新的javascript规范:
var lowerBound = new Date(Date.parse("@Model.LowerBound.ToUniversalTime().ToString("s")"));
这里有一个使用jQuery的选项:(我确信有一种方法可以在这里添加时间)
使用正则表达式清理稍微简单的字符串:
var myDate = "\\/Date(1508821200000)\/";
var jsDate = new Date(parseInt(myDate.replace(/\D/g, '')));
实际上,问题是我需要将包含日期的对象序列化为JSON,并在客户端使用这些日期。这几乎就是我最终要做的事情,但当我解析一个包含多个日期和其他信息的大型对象时,这看起来会很难看。这对我来说很好:value=new Date(parseInt(value.replace(“/Date(,”).replace(“)/”,""))); 我猜第二个参数中的10没有必要,因为它在日期中附加了时间10:00。我正在处理的日期来自服务器,并且它们在其中配置了时间,所以我不希望更改。谢谢你的回答!第二个参数中的10是必需的,它是parseInt的基数参数。它没有附加任何内容。它指定了基数或基数的类型,如果没有它,在不同的系统上可能会有不同的行为。@webdeveloper parseInt参数在
Javascript的好部分中(绝对值得一读)-它是Javascript的许多隐藏功能之一。它假设您基本上是8位,我更喜欢这个答案,而不是解决JS中问题的其他答案。这个问题是在.Net中解决的,所以应该在.Net IMO中解决。您的许多答案似乎只包含一个指向您博客文章的链接之外的内容很少。你有没有机会把它们扩展成真正的答案?其余的看起来很棒,我相信这些博客帖子也会给出很好的答案。等等,但是做得很好。这到底在做什么DateTime dt1=dt
不执行任何操作。
var lowerBound = $.datepicker.parseDate('yy-mm-dd', "@Model.LowerBound.ToString("yyyy-MM-dd")");
var myDate = "\\/Date(1508821200000)\/";
var jsDate = new Date(parseInt(myDate.replace(/\D/g, '')));