如何在Razor文件中呈现MS日期时间JSON格式

时间:2013-07-31 05:52:17

标签: c# json datetime serialization

Microsoft ASP.NET MVC的JSON序列化程序将日期时间值转换为"\/Date(1239018869048)\/"

我在客户端有一个使用此格式的组件来显示日期时间选择器。但是,请从不同来源创建日期时间值:

  1. 来自控制器操作返回的JSON
  2. 从Razor页面中呈现的某些值
  3. 第一个来源创建所需格式的日期时间,即"\/Date(1239018869048)\/"。但是,第二个源以人类可读的格式呈现日期时间,即7/31/2013 10:03:53 AM

    无论如何在Razor页面中创建JSON序列化日期格式?

2 个答案:

答案 0 :(得分:2)

JSON没有定义日期格式。但是,客户端组件使用的日期格式很可能是自1970年1月1日00:00:00以来经过的毫秒数。要生成预期的输出,您需要计算经过的毫秒数,并且可以这样做(假设dateTime包含您要转换的日期):

var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var elapsedSinceEpoch = dateTime - epoch;
var formattedDateTime = string.Format(
  @"""\/Date({0:F0})\/""",
  elapsedSinceEpoch.TotalMilliseconds
);

要在Razor视图中使用此格式,最好将代码包装在辅助方法中。

答案 1 :(得分:0)

您需要选择一个标准的单一日期格式,并且有一个javascript库,它基本上只采用各种日期格式并吐出您的首选格式。例如。这与您需要使用jQuery UI的datepicker但后来以不同格式传回所选日期的情况相关。

有几个日期处理库可用,但我使用MomentJS。这可以accept the /Date(...)/ format and return a date object,但您也可以从特定的字符串格式创建日期对象。您也可以将其用于pump out a date in a custom string format

var formattedDate = moment().format("[/Date(]X[)/]");