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

本文关键字:日期 MS 时间 JSON 格式 Razor 文件 | 更新日期: 2023-09-27 18:25:32

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

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

  1. 来自控制器操作返回的JSON
  2. 从Razor页面中呈现的某些值

第一个源创建所需格式的日期时间,即"'/Date(1239018869048)'/"。然而,第二个源以人类可读的格式呈现日期时间,即7/31/2013 10:03:53 AM

有没有办法在Razor页面中创建JSON序列化日期格式?

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

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视图中使用这种格式,最好将代码包装在辅助方法中。

您需要选择一种标准的单一日期格式,并拥有一个javascript库,该库基本上只接受各种日期格式并输出您喜欢的格式。例如,如果您需要使用jQuery UI的日期选择器,但随后以不同的格式返回所选日期,则这将是相关的。

有几个可用的日期处理库,但我使用MomentJS。这可以接受/Date(…)/格式并返回日期对象,但也可以使用特定的字符串格式创建日期对象。您也可以使用它以自定义字符串格式输出日期:

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