关于sql server:Kendo Grid中的日期问题

Date issue in Kendo Grid

我的应用程序正在运行服务器,其时区UTC + 05:30。 我的客户端机器有UTC-05:00时区。

现在假设他在文本框中输入12/31/19并保存表单,当他在kendo网格中查看详细信息时,日期显示为12/30/1989而不是12/31/1989。

我通过更改我的电脑的时区调试应用程序,并在调试中发现了

  • 在插入/更新语句被触发之前,日期不会更改。 它保持在1989年12月31日。
  • 在数据库中,日期也存储为12/31/1989。
  • 当我从数据库获取数据时,模型和控制器日期仍然是12/31/1989。
  • 但是当我使用以下查询以JSON格式将数据返回到kendo网格时,它会在页面上显示日期为12/30/1989。
  • C#

    1
    2
    3
    4
    public ActionResult GetPatients([DataSourceRequest] DataSourceRequest request, int includePatientId = 0)
    {
      return Json(this.patienModel.RetrieveActivePatients().ToDataSourceResult(request));
    }

    剑道网格

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    @(Html.Kendo().Grid<RxConnectEntities.Patient>
           ().Name("PatientList")
           .Columns(columns =>
           {
             columns.Bound(p => p.PatientID).Visible(false);
             columns.Bound(p => p.Name).Width(100);
             columns.Bound(p => p.Gender).Width(80);
             columns.Bound(p => p.DateOfBirth).Width(90)
                    .Format("{0:MM/dd/yyyy}")
                    .EditorTemplateName("DateOfBirth")
                    .Filterable(false).HtmlAttributes(new { id ="gridDateOfBirth" })
                    .ClientTemplate("#: kendo.toString(kendo.parseDate(data.DateOfBirth),'MM/dd/yyyy') #");
                    columns.Bound(p => p.PhoneNumber).Title("Phone Number").Width(110);
                    columns.Command(command =>
                    {
                      command.Custom("Select").Click("OnSelectRow");
                      command.Custom("Edit").Text("Edit").Click("EditGrid");
                    }).Width(120);
             })
             .Pageable(p => p.PageSizes(true))
             .DataSource(dataSource => dataSource
             .Ajax().ServerOperation(true)
             .PageSize(5)
             .Model(m => m.Id(p => p.PatientID))
             .Read(read => read.Action("GetActivePatientList","Order")
             .Data(@"function(){
                   return{
                     includePatientId:" + (TempData["includePatientId"] ?? 0) + @"
                   }
              }"))
              .Destroy(delete => delete.Action("Deletepatient","Order"))
           )
        )


    我有强类型剑道网格的类似问题。 这听起来很奇怪,将强类型的一个改为JS对应解决了我的问题。 我找不到任何解释,但我猜我可以明确告诉列类型="日期"。 我知道这不符合逻辑,但至少你可以试试。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    schema: {
                model: {
                    id:"PatientID",
                    fields: {
                        PatientID: {},
                        Name: {},
                        Gender: {}
                        DateOfBirth: { type:"date" }                        
                    }
                }
            }

    您可以使用DateTime.Date去除日期的时间部分。

    1
    2
    3
    4
    var testDateTime = DateTime.Now;
    var testDate = dateAndTime.Date;

    // Save testDate to SQL Server

    这应该在保存时将时间部分设置为00:00:00