2010-04-15 84 views
0

我正在调用包含datetime数据类型的数据库。日期如下:使用javascript/jquery格式化数据库的正确方法

2005-05-23 16:06:00.000

我想在一个表格中显示此当用户从列表中选择某一个项目。我打电话给我的控制器动作,并将Json的所有时间都放回到桌子上。问题是日期完全错误。什么是显示的是:

/日期(1255470180000)/

返回的日期是不是连解析的(我不想做反正),所以我甚至无法获得数据如果我想。有任何想法吗?

回答

1

我结束了在控制器操作中的代码格式代替。

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

感谢您的帮助,虽然家伙。

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版的吗,你能提供该格式的日期转换为字符串服务器端的一个替代品,并处理它那里,因为你说过你不想解析客户端的日期(尽管jQuery标签对我来说可能是你做的)。

+0

我相信这是1970年1月1日以来的毫秒数 - 这个时代。 – Tarski 2010-04-15 21:37:13

+0

@Tarski:谢谢,我澄清了。 (在JavaScript中,“tick”有时是“毫秒”的同义词,虽然当然这不是*如何用于C) – 2010-04-15 21:41:05

+0

感谢您的解决方案。我希望有一种方法可以从控制器操作中返回一个非UTC值。 你给我的解决方案还显示:周五2005年1月21日10:29:00 GMT-0500(美国东部标准时间),而不是仅仅周五2005年1月21日10:29:00 – Darcy 2010-04-15 21:46:11

0

另一种选择是从控制器操作返回格式化的字符串。你甚至可以留下时间戳,并返回第二个字段作为“格式化时间戳”或类似的东西。

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