【问题标题】:Pass a datetime from javascript to c# (Controller)将日期时间从 javascript 传递给 c# (Controller)
【发布时间】:2011-07-28 06:55:45
【问题描述】:

如何使用 jquery 和 mvc3 将日期时间(我需要它到第二个)传递给 c#。这就是我所拥有的

var date = new Date();    
$.ajax(
   {
       type: "POST",
       url: "/Group/Refresh",
       contentType: "application/json; charset=utf-8",
       data: "{ 'MyDate': " + date.toUTCString() + " }",
       success: function (result) {
           //do something
       },
       error: function (req, status, error) {
           //error                        
       }
   });

我不知道日期应该采用什么格式,以便 C# 理解。

【问题讨论】:

    标签: c# jquery json asp.net-mvc-3


    【解决方案1】:

    尝试使用 toISOString()。它返回 ISO8601 格式的字符串。

    GET方法

    javascript

    $.get('/example/doGet?date=' + new Date().toISOString(), function (result) {
        console.log(result);
    });
    

    c#

    [HttpGet]
    public JsonResult DoGet(DateTime date)
    {
        return Json(date.ToString(), JsonRequestBehavior.AllowGet);
    }
    

    POST 方法

    javascript

    $.post('/example/do', { date: date.toISOString() }, function (result) {
        console.log(result);
    });
    

    c#

    [HttpPost]
    public JsonResult Do(DateTime date)
    {
         return Json(date.ToString());
    }
    

    【讨论】:

    • toISOString() 做了更多这里没有提到的事情。我将 JS 日期转换为 2018 年 2 月 4 日的 UTC 日期,它转换为 2018 年 2 月 3 日 2300Z,然后在服务器端我得到: 03/02/2018 23:00:00 所以我必须这样做: myDate.ToLocalTime() (假设当前文化是 DE)然后我得到了 04.02.2018。
    • 我更正:“...在服务器端我得到了:03/02/2018 22:00:00”
    【解决方案2】:

    以下格式应该有效:

    $.ajax({
        type: "POST",
        url: "@Url.Action("refresh", "group")",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ 
            myDate: '2011-04-02 17:15:45'
        }),
        success: function (result) {
            //do something
        },
        error: function (req, status, error) {
            //error                        
        }
    });
    

    【讨论】:

    • 这会假设浏览器/客户端时间和服务器时间是同步的,但不一定是这种情况。
    • @amonteiro,当然,您总是可以在发送之前将数据转换为通用时间,以便在服务器上您可以转换回服务器本地时间。
    • 这很好用。我如何发送一个不是 4 月 2 日的日期,也许是一个 Date 变量?
    • @sanepete 我相信您可以提供任何格式正确的日期字符串或包含日期字符串的变量,它会起作用。
    • @Owen,是的,谢谢,我最终使用了类似于:data: JSON.stringify({ myDate: myAwesomeDate }),
    【解决方案3】:

    在 javascript 中有一个toJSON() 方法返回 Date 对象的字符串表示形式。 toJSON() 是 IE8+,toISOString() 是 IE9+。两个结果都是YYYY-MM-DDTHH:mm:ss.sssZ 格式。

    var date = new Date();    
        $.ajax(
           {
               type: "POST",
               url: "/Group/Refresh",
               contentType: "application/json; charset=utf-8",
               data: "{ 'MyDate': " + date.toJSON() + " }",
               success: function (result) {
                   //do something
               },
               error: function (req, status, error) {
                   //error                        
               }
           });
    

    【讨论】:

      【解决方案4】:

      试试这个

      var date = new Date();    
      $.ajax(
         {
             type: "POST",
             url: "/Group/Refresh",
             contentType: "application/json; charset=utf-8",
             data: "{ 'MyDate': " + date.getTimezoneOffset() + " }",
             success: function (result) {
                 //do something
             },
             error: function (req, status, error) {
                 //error                        
             }
         });
      

      在 C# 中

      DateTime.Now.ToUniversalTime().AddMinutes(double.Parse(MyDate)).ToString();
      

      【讨论】:

      • so DateTime.Now.ToUniversalTime().AddMinutes(double.Parse(MyDate)).ToString();会给我在服务器上的通用时间吗?如果我执行 .ToLocalTime(),它会将其转换为服务器时间吗?
      • 实际上现在我想到了,这只会给我偏移量而不是实际经过的时间。所以我必须传递两个变量 - 你发布的偏移量和 Darin 发布的日期时间
      【解决方案5】:

      我发现我需要像这样包装我的日期时间字符串:

      "startdate": "\/Date(" + date() + ")\/"
      

      我花了一个小时才弄清楚如何启用 WCF 服务来给我返回告诉我 XD 的错误消息

      【讨论】:

        【解决方案6】:

        更新:请参阅标记的答案作为实施此问题的更好解决方案。不再需要以下解决方案。

        将 json 日期转换为这种格式“mm/dd/yyyy HH:MM:ss”
        dateFormat 是一个 jasondate format.js 文件,位于 blog.stevenlevithan.com

        var _meetStartTime = dateFormat(now, "mm/dd/yyyy HH:MM:ss");
        

        【讨论】:

          【解决方案7】:
          var Ihours = Math.floor(TotMin / 60);          
          

          var Iminutes = TotMin % 60; var TotalTime = Ihours+":"+Iminutes+':00';

             $.ajax({
                      url: ../..,
                      cache: false,
                      type: "POST",                
                      data: JSON.stringify({objRoot: TotalTime}) ,
                      dataType: 'json',
                      contentType: "application/json; charset=utf-8",
                      success: function (response) {
          
                      },
                      error: function (er) {
                          console.log(er);
                      }
                  });
          

          【讨论】:

            猜你喜欢
            • 2017-10-08
            • 2022-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多