使用javascript / jquery从数据库格式化日期的正确方法

时间:2010-04-15 21:19:52

标签: javascript jquery asp.net-mvc linq datetime

我正在调用包含datetime数据类型的数据库。日期如下:

2005-05-23 16:06:00.000

当用户从列表中选择某个项目时,我想在表格中显示它。我调用我的控制器动作并一直返回Json并将它们放在一个表中。问题是日期完全错了。显示的是:

/日期(1255470180000)/

返回的日期甚至无法解析(我不想做任何事情)因此如果我愿意,我甚至无法获取数据。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您回来的日期被序列化为标记,并且自1970年1月1日午夜(UTC)起数毫秒。如果您将数字部分隔离,请将其转换为数字,并将其提供给Date构造函数,您将获得一个实际的日期,然后您可以根据需要进行格式化。

var ticks, dt;

// Isolate the numeric portion of the value
ticks = /[0-9]+/.exec(json.dateValue)[0];

// Convert to a number
ticks = parseInt(ticks);

// Convert to a date
dt = new Date(ticks);

或者,如果服务器上的JSON序列化程序支持Crockford和ECMAScript第5版的“replacer”参数,你可以提供一个将日期格式化为字符串服务器端并在那里处理它的替换器,因为你说过你不想解析日期客户端(虽然jQuery标签建议我也许你这样做。)

答案 1 :(得分:1)

我最终在控制器操作中格式化了代码。

我只是使用.ToString()将datetime属性转换为字符串,并获得了所需的结果。

感谢你们的帮助。

答案 2 :(得分:0)

另一种方法是从控制器操作返回格式化字符串。您甚至可以保留时间戳并将第二个字段作为“格式化时间戳”或类似内容返回。

var listFromDb = ...
return new Json(listFromDb.Select(itemFromDb => new List { new 
     { Date = itemFromDb.Date, FormattedDate = FormatDate(itemFromDb.Date), ...}