将C#日期时间加载到KendoUI日期选择器

时间:2013-10-17 06:33:11

标签: c# jquery kendo-ui

我正在尝试将DateTime加载到KendoUI DatetimePicker。但它显示像/日期(1381964400000)/。我需要得到它像10/17/2013

这是我的代码

日期时间选择器:

@(Html.Kendo().DatePicker().Name("invDate")

用于加载控制日期时间的脚本

$("#invLoad").click(function (e) {
            $.ajax({
                url: "@Url.Content("Invoice/ItemHeaderByTrnKy")",
                data: { trnNo: $('#trnNo').val() },
                dataType: "Json",
                type: "POST",
                success: function (data) {
                    if (data != null) {

                        $("#invDate").val(data.TrnDt);

                    }
                    else {
                        ClearAll();
                    }
                },
                error: function (e) {
                    ClearAll();
                }
            });

1 个答案:

答案 0 :(得分:1)

第一个选项是尝试将字符串解析为JavaScript Date对象,然后将该对象传递给kendoDatePicker小部件:

success: function (data) {
    if (data) {
        var dateval = parseInt(data.TrnDt.src.replace(/\/Date\((\d+)\)\//, "$1"));
        if (!isNaN(dateval)) {
            var d = new Date(dateval);
            $("#invDate").data("kendoDatePicker").value(d);
    } else {
        ClearAll();
    }
},

步骤:

  1. 使用data.TrnDt.src.replace(/\/Date\((\d+)\)\//, "$1")从字符串中提取数值并解析为整数。
  2. 创建Date对象
  3. Date对象传递给kendoDatePicker的{​​{1}}功能。
  4. 虽然这种方法很有效,但结果可能并不完全符合您的预期。 .NET JSON编码可能会产生本地时间偏移,而value()构造函数需要一个值作为UTC偏移量,然后转换为本地时间。因此,根据服务器的时区和客户端的时区,您的输出将偏移数小时。

    在我的客户端上,解析您提供的日期值会得到Date()的结果。这告诉我你可能正在其中一个GMT + 0100时区中运行。

    解决这个问题的唯一可靠方法是第二个选项:将所有Date值作为可由Thu Oct 17 2013 09:00:00 GMT+1000构造函数解释的字符串返回。

    如果您在服务器上将日期值格式化为Date()并将结果字符串传递给dd MMM yyyy,那么您将获得预期的日期值。如果您只是通过ASP控制器中的new Date()返回一个对象,最简单的方法是向您的对象添加一个转换属性:

    return Json(result);

    然后您的代码变为:

    public string strTrnDt { get { return TrnDt.ToString("dd MMM yyyy"); } }
    

    甚至更简单:

    success: function (data) {
        if (data) {
            var d = new Date(data.strTrnDt);
            $("#invDate").data("kendoDatePicker").value(d);
        } else {
            ClearAll();
        }
    },