【问题标题】:Proper way to format date from database using javascript/jquery使用 javascript/jquery 从数据库格式化日期的正确方法
【发布时间】:2010-04-15 21:19:51
【问题描述】:

我正在调用包含日期时间数据类型的数据库。日期如下所示:

2005-05-23 16:06:00.000

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

/日期(1255470180000)/

返回的日期甚至无法解析(我也不想这样做),所以如果我想的话,我什至无法获取数据。有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    您返回的日期被序列化为一个标记和自 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 标记向我建议也许你做了)。

    【讨论】:

    • 我相信这是自 1970 年 1 月 1 日 - 纪元以来的毫秒数。
    • @Tarski:谢谢,我澄清了。 (在 JavaScript 中,“tick”有时是“毫秒”的同义词,当然 不是它在例如 C 语言中的使用方式。)
    • 感谢您的解决方案。我希望有一种方法可以从控制器操作中返回非 UTC 值。您提供的解决方案还显示:Fri Jan 21 2005 10:29:00 GMT-0500(东部标准时间)而不是 Fri Jan 21 2005 10:29:00
    • @Darcy:如果你想在服务器端处理它,我会从你的问题中删除 jquery 和(除非你使用 javascript 服务器端,我经常这样做)javascript 标签。关于你的第二条评论,我确实说过“......然后你可以随意格式化。” :-)
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      谢谢大家的帮助。

      【讨论】:

        猜你喜欢
        • 2018-09-21
        • 2018-07-13
        • 2010-12-04
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 2013-06-25
        相关资源
        最近更新 更多