2016-04-28 88 views
0

我試圖使用一些參數將數據讀取並加載到kendo網格。但是當我使用日期參數時,日期格式正在改變,因此在服務器端顯示我錯誤的日期。使用Kendo Grid獲取數據時日期格式發生變化

作爲我使用的參數的示例:new Date(「2016年4月1日」)。但在服務器端它變成04/01/2016這是錯誤的。

function passFilterCstDetails() { 
 

 
     var statemenetInquiryParameter = {}; 
 

 
     statemenetInquiryParameter.isPrintZero = true; 
 
     statemenetInquiryParameter.isPrintPayments = true; 
 
     statemenetInquiryParameter.isPrintAdjust = true; 
 
     statemenetInquiryParameter.cst_stmt_from = new Date("April 01, 2016"); 
 
     statemenetInquiryParameter.cst_stmt_to = new Date("April 12, 2016"); 
 
     statemenetInquiryParameter.customerCode = 007; 
 

 
     return { 
 
      statemenetInquiryParameter: statemenetInquiryParameter 
 
     } 
 
    }
<div class="row"> 
 
        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> 
 
         @(Html.Kendo().Grid<ServicePROWeb.ServiceProWCFService.CstTran>() 
 
          .Name("gridCustomerCstTranDetails") 
 
          .Columns(columns => 
 
          { 
 
           columns.Bound(p => p.cst_inv_date).Title("Invoice Date").HtmlAttributes(new { @style = "text-align: right;" }).Format(Session["DisplayFormat_GridDate"].ToString()).Width(80); 
 
           columns.Bound(p => p.cst_type).Title("Type").Width(80); 
 
           columns.Bound(p => p.cst_ih_invno).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Invoice Number").Width(80); 
 
           columns.Bound(p => p.cst_dr_amount).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Debit").Width(80); 
 
           columns.Bound(p => p.cst_cr_amount).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Credit").Width(80); 
 
           columns.Bound(p => p.cst_dr_balance).Format("{0:n2}").HtmlAttributes(new { @style = "text-align: right;" }).Filterable(false).Title("Balance").Width(80); 
 
          }) 
 
          .Selectable() 
 
          .Sortable() 
 
          .Scrollable() 
 
          .Resizable(resize => resize.Columns(true)) 
 
          .HtmlAttributes(new { style = "cursor:pointer;height:auto;width:auto;margin-top: 0px;" }) 
 
          .DataSource(dataSource => dataSource 
 
          .Ajax() 
 
          .Read(read => read.Action("LoadCustomerStatementEnquiryDetails", "Stage").Data("passFilterCstDetails"))) 
 
         ) 
 
        </div> 
 
       </div>

public class StatemenetInquiryParameter 
{ 
    public decimal customerCode { get; set; } 
    public DateTime cst_stmt_from { get; set; } 
    public DateTime cst_stmt_to { get; set; } 
    public bool isPrintZero { get; set; } 
    public bool isPrintPayments { get; set; } 
    public bool isPrintAdjust { get; set; } 
} 

public ActionResult LoadCustomerStatementEnquiryDetails([DataSourceRequest]DataSourceRequest request, StatemenetInquiryParameter statemenetInquiryParameter) 
    { 
     List<CstTran> l = new List<CstTran>(); 

     for (int i = 0; i < 12; i++) 
     { 
      CstTran c = new CstTran(); 

      c.cst_inv_date = statemenetInquiryParameter.cst_stmt_from.AddDays(i); 
      c.cst_type = "I"; 
      c.cst_ih_invno = i + 1; 
      c.cst_dr_amount = i; 
      c.cst_cr_amount = 0; 
      c.cst_dr_balance = c.cst_dr_balance + i; 

      l.Add(c); 
     } 

     return Json(l.ToDataSourceResult(request)); 
    } 
+0

所以,當你從服務器上取回數值時,它會給你4月1日或1月4日。如果是1月4日,那麼這是一個簡單的「全球化」問題,你有解決方案的一部分在諸如「en-US」和「en-GB」等之間進行翻譯MMddyyyy與ddMMyyyy使用此鏈接可能會有所幫助:http://docs.telerik.com/kendo-ui/framework/globalization/overview –

回答

0

我也有這個問題,我通過檢查節約時間的數據格式,解決了這個問題。

1-找到數據,同時節省

var dataS = $("#grid").data("kendoGrid").dataSource; 
var updatedData = dataS._data; 

2-檢查格式並保存它,我的數據參數是rsrc_dt

var dateValue = updatedData[i].rsrc_dt; 
    var day; var year; var mon; 
    if (typeof dateValue === 'string' || dateValue instanceof String) { 
    day = dateValue.split('/')[0]; // use when date is not in correct string format 
    mon = dateValue.split('/')[1]; 
    year = dateValue.split('/')[2]; 
    var dateS = day + '/' + mon + '/' +year; 
    serverData[i].rsrc_dt = dateValue; 
    } 
    else if (dateValue instanceof Date) { 
    var date = new Date(updatedData[i].rsrc_dt); 
    year = date.getFullYear(); 
    day = date.getDate(); 
    day = day < 10 ? '0' + day : day 
    mon = date.getMonth(); 
    mon = mon + 1; 
    mon = mon < 10 ? '0' + mon : mon; 
    var dateF = day + "/" + mon + "/" + year; 
    serverData[i].rsrc_dt = dateF; 
    } 

3 - 你也可以試試這個,給格式像這樣的

 { field: "rsrc_dt", title: "Session Date", format: "{0:dd/MM/yyyy}", editor: dateTimeEditor, width: 73, attributes: { "class": "azN" }, }, 

4-使用DateEditor

現場模板數據
function dateTimeEditor(container, options) { 
    $('<input name="editableBlock" data-text-field="' + options.field + '" data-value-field="' + options.field + '" data-bind="value:' + options.field + '" data-format="' + options.format + '"/>') 
      .appendTo(container) 
      .kendoDatePicker({ min: btch_strt_dt }); 

}