【问题标题】:Json date to Javascript date in Asp.net coreAsp.net核心中的Json日期到Javascript日期
【发布时间】:2020-11-17 19:02:20
【问题描述】:

net core 3.1 mvc 网络应用。在我的服务器上我这样做:

[HttpGet]
        public IActionResult LastDate()
        {
            DateTime send = DateTime.Now;
            try
            {
                send = _db.MySend.ToList().Max(x => x.Date).GetValueOrDefault().AddDays(1);
            }
            catch { }
            return Json( new { date = send });
        }

然后在我的前端我做:

var link = 'MYLINK';
            var args = {};
            $.ajax({
                type: "GET",
                url: link,
                data: args,
                dataType: "json",
                success: function (data) {
                    var my_date = data.date;
                    document.getElementById('Dateee').value = my_date;
                },
                error: function () {
                    alert("Error.");
                    return;
                }
            });

我尝试将 Json 日期转换为 Javascript,但我无法。感谢您的帮助。

编辑:1. 我正在使用 Microsoft.AspNetCore.Mvc Json。 2. 影响日期的本地化:

var supportedCultures = new[]{
                new CultureInfo("cs-CZ")
            };
            app.UseRequestLocalization(new RequestLocalizationOptions
            {
                DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("cs-CZ"),
                SupportedCultures = supportedCultures,
                FallBackToParentCultures = false
            });
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("cs-CZ");``` 

【问题讨论】:

  • 请将呈现的响应分享到您的LastDate 操作端点。我们需要知道如何将您的 ASP.NET Core 应用程序配置为序列化 DateTime 值。你用的是什么 JSON 库?
  • 您的Dateee 元素的type="" 属性值是多少?
  • 我的 Datee 类型是 date(我已编辑 answear 以获取有关我的 datetime 的更多信息)

标签: javascript json date asp.net-core


【解决方案1】:
  • JSON 规范没有为日期+时间值规定任何特定的表示形式(令人讨厌...)。
  • 因此,有多种格式和方法可以通过 JSON 发送 .NET DateTime 和 JS Date 值。
    • 例如以毫秒为单位发送 UNIX 时间。
    • 或发送 ISO 8601 格式的字符串
    • 或者 ASP.NET AJAX 在 2005 年到 2012 年之间使用的可怕格式,看起来像“/Date(12345)/”(他们到底在想什么?!) .
  • 在您的帖子中没有任何进一步的信息,我建议使用 ISO 8601 字符串序列化该值,其优点是通过 Date 构造函数和 valueAsDate 属性与 HTML5 的 <input type="date" /> 兼容。
    • 在此过程中,让我们让您的控制器操作async(看起来您正在使用实体框架)。
    • 让我们让您的客户端代码使用异步fetch
      • 为了 TIM BERNERS-LEE 的缘故,2020 年请大家停止使用 JQUERY,停止使用 10 年前的无关和过时的客户端库 AIAIIEIEIEIEIEIIE

像这样:

[HttpGet]
public async Task<IActionResult> LastDate()
{
    DateTime value = await this._db.MySend.MaxAsync( x => x.Date );
    
    DateTime send = value.AddDays(1);
 
    String formatted = send.ToString( "yyyy-MM-dd'T'HH:mm:ss",  CultureInfo.InvariantCulture );
       
    return this.Json( new { date = formatted  } );
}

客户端:

try {
    const resp = await fetch( link );
    if( resp.status === 200 ) {
        const obj = await resp.json();
        const dateStr = obj.date; // string
        const date = new Date( dateStr );
        document.getElementById('Dateee').valueAsDate = date;
    }
}
catch( err ) {
    alert( "Error: " + err );
}

【讨论】:

  • 请耐心等待 :) 我希望你有一个美好的一天 :) 顺便说一句,我想结束 JQuery 但我的网站是用它构建的,包括一些元素,所以我必须拥有它...
猜你喜欢
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 2012-06-07
相关资源
最近更新 更多