【问题标题】:How to parse JSON format date string into date format如何将 JSON 格式的日期字符串解析为日期格式
【发布时间】:2016-05-17 03:18:36
【问题描述】:

我正在做的是,使用 ajax 从数据库中获取数据并将其显示在 html 文本框中以进行更新。下面是我成功获取数据的 Web 方法代码。

[WebMethod]
public static List<Employee> getEmployee()
{
     var slist = new List<Employee>();
     var db = new BLUEPUMPKINEntities();
     slist = db.Employees.ToList();
     return slist;
}

现在,当我从数据库中获取数据时,我得到了这种格式的日期/Date(725828400000)/。我搜索谷歌关于解析和转换 json 日期字符串格式为 html / javascript 日期也使用 3rd 方插件,如 moment.js 和 jquery.ui 但没有解决我的问题。另外在这里我分享我的代码,我从 ajax 以 json 格式获取数据并将其显示在 jquery 数据表上。

$.ajax({
    url: "Employees.aspx/getEmployee",
    data: null,
    contentType: "Application/json; charset=utf-8",
    responseType: "json",
    method: "POST",
    success: function (response) {
        //alert(response.d);

        var jsonObject = response.d;
        var result = jsonObject.map(function (item) {
            //var date = new Date(item.EMP_DOB);
            //var obj = Date.parse(date);
            var result = [];
            result.push('');
            result.push(item.EMP_FNAME);
            result.push(item.EMP_MNAME);
            result.push(item.EMP_LNAME);
            result.push(item.EMP_EMAIL);
            result.push(item.EMP_DOB); //this is my date column in my database from where date is in yyyy/mm/dd format
            result.push(item.EMP_USERNAME);
            result.push(item.EMP_PASSWORD);
            result.push(item.ID);
            return result;
        });
        myTable.rows.add(result); // add to DataTable instance
        myTable.draw();
    },
    error: function (xhr) {
        alert(xhr.status);
    },
    Failure: function (response) {
        alert(response);
    }
});

我想要 mm/dd/yyyy 格式的日期。请帮我解决我的问题。

【问题讨论】:

  • 从服务器发送 ISO 日期字符串开始

标签: javascript jquery asp.net json ajax


【解决方案1】:

如果添加依赖没有问题,那么您可以添加 moment.js 它将帮助您以任何格式格式化数据 我假设来自服务器的日期是这种格式'/Date(725828400000)/'

var d = item.EMP_DOB;
result.push(moment(Number(d.match(/\d+/)[0])).format('MM/DD/YYYY'));

如果你无法添加 moment js,那么你可以这样做

var date = new Date(Number(d.match(/\d+/)[0]));
var day = date.getDate();
day = day = (day < 10) ? ("0" + day) : day;
var month = date.getMonth() + 1);
month = (month < 10) ? ("0" + month) : month;
var dateStr = day + "-" + month + "-" + date.getFullYear();
result.push(dateStr);

【讨论】:

  • @charlietfl 我编辑了我的答案,我认为他得到了一个有效的日期字符串,但格式不同
  • 感谢您的正确回答。它对我有用。但这里还有一个问题是&lt;asp:Content ID="Content1" ContentPlaceHolderID="Employees_head" runat="server"&gt; &lt;script src="../Scripts/moment.js"&gt;&lt;/script&gt; &lt;script src="../js/ajaxcall.js"&gt;&lt;/script&gt; &lt;/asp:Content&gt; Moment js 无法访问我的 ajaxcall 外部文件。所以我把 ajaxcall --> getEmployee() 方法放在外部文件之外,我可以很容易地从中访问它。但是我想将我的 moment() 访问到我的 ajaxcall 方法中,因为在该方法中我放置了所有 ajax 方法。
  • 您之前的代码向我显示了正确的格式。你为什么编辑它?实际上主要问题是我的 ajaxcall.js 文件无法访问 moment() 方法。我之前也放了 moment.js 文件引用,但它不能访问 ajaxcall。如果你告诉我如何将 moment.js 引用到 ajaxcall.js 外部文件中。所以我再次非常感谢你。
  • 实际上@charlietfl 否决了该答案,如果您无法插入时刻 js,那么您可以创建一个函数来格式化您的日期
  • 什么是d?如果我输入jsonObject.EMP_DOB.match,则没有智能感知与match匹配
【解决方案2】:

最简单的方法如下(不需要第三方js)

var data =from row in db.Employees.ToList()
 select new {
    EMP_DOB=row.EMP_DOB.ToString(), row.EMP_FNAME,row.EMP_MNAME,row.EMP_LNAME
     row.EMP_EMAIL,row.EMP_DOB,row.EMP_USERNAME,row.EMP_PASSWORD,row.ID
 };

如果你想格式化你可以使用的日期

var data =from row in db.Employees.ToList()
     select new {
         EMP_DOB=Convert.ToString(row.EMP_DOB).ToShortDateString(), other properties goes here as shown previously
     };

您可以使用 C# 随意格式化它

【讨论】:

  • 感谢您的评论,但您的回答对我不起作用。
  • row.EMP_DOB.ToString() 上突出显示此错误,匿名类型成员声明器无效。必须使用成员分配、简单名称或成员访问来声明匿名类型成员。
  • 我刚刚编辑了我的答案,我在外面,所以无法回复。如果你愿意,你可以检查。你不需要在客户端做任何事情
【解决方案3】:
var dbDate = "2014/03/12";    
var date    = new Date(dbDate); 

// 代替硬编码的日期放置您的字符串

对于您的情况,您从 Db 获得一个长值作为字符串。添加 多一行

 var newDate = parseInt("725828400000"); // use here your item.EMP_DOB;

现在将此值传递给您的对象。喜欢

var date = new Date(newDate);


var mm = (date.getMonth()+1)>9?(date.getMonth()+1):"0"+(date.getMonth()+1);
var dd = date.getDate()>9?date.getDate():"0"+date.getDate();
var yyyy = date.getFullYear();
var newDate = mm+"/"+"/"+dd+"/"+yyyy;
alert(dbDate+" converted to "+newDate)

【讨论】:

  • 我正在将日期转换为 /Date(725828400000)/ 这种格式而不是这种“2014/03/12”
  • var date = new Date(item.EMP_DOB) // 它显示 NaN 错误
  • 试试这个:var newDate = parseInt("725828400000"); // 在这里使用你的 item.EMP_DOB;现在将此值传递给您的对象。像 var date = new Date(newDate);您将 long 值作为字符串传递,因此您无法解析。
【解决方案4】:

你已经有了一个数据对象,它有方法来提取你需要的一切。

你可以像下面这个例子那样做一个函数:

Get string in yyyymmdd format from js date object

【讨论】:

    【解决方案5】:

    此方法会将您的所有WCF 类型日期转换为javascript 日期对象:

    var dateRegex = /^\/Date\((d|-|.*)\)[\/|\\]$/;
    
    function convertWCFStringDate(strDate) {
        var matched = dateRegex.exec(strDate);
        if (matched) {
            var parts = matched[1].split(/[-+,.]/);
            return new Date(parts[0] ? +parts[0] : 0 - +parts[1]);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 2022-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多