使用moment.js格式化ASP.NET MVC中的视图模型日期

Mik*_*SFT 13 asp.net-mvc razor

我使用Razor作为ASP.NET MVC 5中的视图引擎.我的日期是从UTC的后端服务返回的.我想moment.js客户端上使用JavaScript(例如)格式化那些.我不想在服务器上这样做,因为我不想担心客户端在服务器端的时区(毕竟服务器并不在乎).

我认为从MVC,AJAX和Moment.js的Locale Date格式化,如果必须的话,有一些方法可以做这个服务器端,虽然我没有足够的信息让它得到解决,这不是我想做的事情无论如何.

ASP.NET MVC ViewModel映射与自定义格式在哪里是格式化ASP.NET MVC(3)中的模型属性的最佳位置?或者如何格式化asp.net中的日期mvc 5不起作用,因为那是服务器端(或者以某种方式我不理解?)

干净可靠地完成这项工作的"最佳"/"正确"方法是什么?

编辑:要清楚,我知道关于这moment.js方面的一切.如果我没有,我就不会给它命名.我要问的是ASP.NET MVC视图集成 - 我如何以"正确"的方式完成它?

编辑2:我知道如何编写脚本.我不知道的是,如果我有一个输出,从脚本变量,我如何获取该变量的内容到视图中显示给用户的信息?如果我可以提供帮助,我不想做像编辑HTML元素内容等的事情.这根本不干净.也许我应该更简单地说明这一点:

想象一下Razor的观点.该观点说:

@foreach (var item in Model) {
    <!-- something to do javascript manipulation of item -->
    <p>The result of manipulating @item.startDate is <!-- WHAT DO I DO HERE? --></p>
}
Run Code Online (Sandbox Code Playgroud)

评论是我现在不知道如何干净利落的.

Guy*_*Guy 19

你可以尝试这个(带剃刀的JS):

var date = moment('@YourDateTime.ToString( "s", System.Globalization.CultureInfo.InvariantCulture )');
Run Code Online (Sandbox Code Playgroud)

来自momentjsdoc:

从字符串创建时刻时,我们首先检查字符串是否与已知的ISO 8601格式匹配

(来源)

来自.NETdoc:

"s"标准格式说明符反映了定义的标准(ISO 8601)

(来源)

编辑

结合momentjs使用的解决方案来Razor显示数组DateTime

HTML/Razor:

@foreach (var item in Model) {
   <p data-utcdate="@item.startDate.ToString("s", System.Globalization.CultureInfo.InvariantCulture)"></p>
}
Run Code Online (Sandbox Code Playgroud)

JS(使用JQuery):

<script type="text/javascript">
    $(function () {
        $('[data-utcdate]').each(function () {
            var d = moment($(this).attr('data-utcdate'));
            $(this).html(d.format());
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

如果您想以不同的格式显示日期:http://momentjs.com/docs/#/displaying/format/

  • 抱歉,也许我太笨了,但这仍然只是告诉我如何获取 JavaScript 变量。如何将该变量值放入视图的输出中,例如在 foreach 循环中? (2认同)
  • 感谢您提供示例 JS 代码。这是否意味着没有办法在不扰乱 DOM 的情况下做到这一点?臭死了 :( (2认同)

归档时间:

查看次数:

12460 次

最近记录:

8 年,8 月 前