Kendo Grid 中的日期问题

Dhw*_*ani 5 sql-server asp.net-mvc kendo-ui kendo-grid

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

现在假设他进入1989年12月31日在一个文本框,并保存表单,当他在剑道网查看详细的日期显示为1989年12月30日,而不是1989年12月31日

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

  1. 直到插入/更新语句被触发,日期才会改变。它保持为12/31/1989
  2. 在数据库中日期也存储为12/31/1989
  3. 当我从数据库中获取数据时,模型和控制器中的日期仍然是12/31/1989
  4. 但是当我使用以下查询以 JSON 格式将数据返回到剑道网格时,它在页面上显示日期为12/30/1989

C#

public ActionResult GetPatients([DataSourceRequest] DataSourceRequest request, int includePatientId = 0)
{
  return Json(this.patienModel.RetrieveActivePatients().ToDataSourceResult(request));
}
Run Code Online (Sandbox Code Playgroud)

剑道格子

@(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"))
       )
    )
Run Code Online (Sandbox Code Playgroud)

Tan*_*ner 0

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

var testDateTime = DateTime.Now;
var testDate = dateAndTime.Date;

// Save testDate to SQL Server
Run Code Online (Sandbox Code Playgroud)

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