序列化了一组json数据,得到的日期的值不会处理了!

yasire 2012-04-25 09:28:25
  List<NUser> list = new List<NUser>();
NUser item = null;
for (int i = 1; i < 10; i++)
{
item = new NUser();
item.ID = i;
item.Name = i + "_Name";
item.Time = DateTime.Now.AddDays(i * -1);
list.Add(item);
}


JavaScriptSerializer serializer = new JavaScriptSerializer();
result = serializer.Serialize(list);
context.Response.Write(result);
context.Response.End();

ajax请求上面的代码,返回一组序列化好的json数据,在前台接收到之后,result[0].Time的值是: "/Date(1335230881375)/"
怎么用js处理成我想要的格式啊? 格式:2012-4-25 9:29:21
...全文
212 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yasire 2012-04-25
  • 打赏
  • 举报
回复
function ParseDate(jsonDate) {
var date = new Date(parseInt(jsonDate.substr(6)));
return date.getFullYear()+"-" + (date.getMonth()+1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
}

这个方法最好。
Date.fromJson = function(jsonDateString) {
return eval(jsonDateString.replace(new RegExp('\/Date\\((-?[0-9]+)\\)\/', 'g'), "new Date($1)"));
};这个和eval('new ' + (json.Time.replace(/\//g, '')));
虽然可以得到时间对象,但是toLocaleString()在各个浏览器中的值是不一样的,主要是safari和chrome。
所以还是自己处理一下,处理成自己想要的格式比较安全可靠。
孟子E章 2012-04-25
  • 打赏
  • 举报
回复
function ParseDate(jsonDate) {
var date = new Date(parseInt(jsonDate.substr(6)));
return date.getFullYear()+"-" + (date.getMonth()+1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
}
porschev 2012-04-25
  • 打赏
  • 举报
回复

正则得改一下

string pattern = @"\\/Date\((\d+)\+\d+\)\\/";
porschev 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

在你后台序列化时候不要用datetime类型,直接用string类型,然后序列化,在前台反序列化就不会出现这个问题了
也就是在你的NUser类中这么设置属性string date,你的应该是datetime date
[/Quote]

一般用这个方法。。。

或者用正则转,不过用正则不是个好方法



string pattern = @"\\/Date\((\d+)\)\\/";

/// <summary>
/// 将Json序列化的时间由/Date(1304931520336+0800)/转为字符串
/// </summary>
private static string ConvertJsonDateToDateString(Match m)
{
string result = string.Empty;
DateTime dt = new DateTime(1970,1,1);
dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value));
dt = dt.ToLocalTime();
result = dt.ToString("yyyy-MM-dd HH:mm:ss");
return result;
}

honkerhero 2012-04-25
  • 打赏
  • 举报
回复
上面是C#, 下边是JS解析


//add static method to Date class
Date.fromJson = function(jsonDateString) {
return eval(jsonDateString.replace(new RegExp('\/Date\\((-?[0-9]+)\\)\/', 'g'), "new Date($1)"));
};
honkerhero 2012-04-25
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace HKH.Web.MVC
{
public class DateTimeHelper
{
/// <summary>
/// Parse Json data string to C# DateTime
/// </summary>
/// <param name="jsonDate"></param>
/// <returns></returns>
public static DateTime FromJson(string jsonDate)
{
return FromJson(jsonDate, DateTimeKind.Local);
}

/// <summary>
/// Parse Json data string to C# DateTime
/// </summary>
/// <param name="jsonDate"></param>
/// <param name="kind"></param>
/// <returns></returns>
public static DateTime FromJson(string jsonDate, DateTimeKind kind)
{
Regex regex = new Regex(@"^/Date\(([0-9]+)(\+[0-9]+)?\)/$");

long InitialJavaScriptDateTicks = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks;
DateTime utcDateTime = new DateTime(long.Parse(regex.Replace(jsonDate, "$1")) * 10000 + InitialJavaScriptDateTicks, DateTimeKind.Utc);

DateTime dateTime;
switch (kind)
{
case DateTimeKind.Unspecified:
dateTime = DateTime.SpecifyKind(utcDateTime.ToLocalTime(), DateTimeKind.Unspecified);
break;
case DateTimeKind.Local:
dateTime = utcDateTime.ToLocalTime();
break;
default:
dateTime = utcDateTime;
break;
}

return dateTime;
}
}
}
  • 打赏
  • 举报
回复
参考

http://kb.cnblogs.com/a/2365098/
netstudy0105 2012-04-25
  • 打赏
  • 举报
回复
在你后台序列化时候不要用datetime类型,直接用string类型,然后序列化,在前台反序列化就不会出现这个问题了
也就是在你的NUser类中这么设置属性string date,你的应该是datetime date
  • 打赏
  • 举报
回复
static void Main(string[] args) 
{ 
  string [] jsonDates = {"/Date(1242357713797+0800)/" , "/Date(1242357722890+0800)/"}; 
  foreach (string jsonDate in jsonDates) 
  { 
    Console.WriteLine("Json : {0}", jsonDate); 
    DateTime dtResult =  JsonToDateTime(jsonDate); 
    Console.WriteLine("DateTime: {0}", dtResult.ToString("yyyy-MM-dd hh:mm:ss ffffff")); 
  } 
  Console.Read(); 
} 

public static DateTime JsonToDateTime(string jsonDate) 
{ 
  string value = jsonDate.Substring(6, jsonDate.Length - 8); 
  DateTimeKind kind = DateTimeKind.Utc; 
  int index = value.IndexOf('+', 1); 
  if (index == -1) 
    index = value.IndexOf('-', 1); 
  if (index != -1) 
  { 
    kind = DateTimeKind.Local; 
    value = value.Substring(0, index); 
  } 
  long javaScriptTicks = long.Parse(value, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture); 
  long InitialJavaScriptDateTicks = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks; 
  DateTime utcDateTime = new DateTime((javaScriptTicks * 10000) + InitialJavaScriptDateTicks, DateTimeKind.Utc); 
  DateTime dateTime; 
  switch (kind) 
  { 
    case DateTimeKind.Unspecified: 
      dateTime = DateTime.SpecifyKind(utcDateTime.ToLocalTime(), DateTimeKind.Unspecified); 
      break; 
    case DateTimeKind.Local: 
      dateTime = utcDateTime.ToLocalTime(); 
      break; 
    default: 
      dateTime = utcDateTime; 
      break; 
  } 
  return dateTime ; 
}

62,067

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧