Date 比较Kendo HTML网格客户端模板中的日期
我需要能够正确地比较剑道HTML网格的客户端模板中的两个日期。以下是我所拥有的:Date 比较Kendo HTML网格客户端模板中的日期,date,kendo-ui,kendo-grid,client-templates,Date,Kendo Ui,Kendo Grid,Client Templates,我需要能够正确地比较剑道HTML网格的客户端模板中的两个日期。以下是我所拥有的: @(Html.Kendo().Grid<TfInvoicesReturnModel>() .Name("invoiceGrid") .DataSource(dataSource => dataSource .Ajax
@(Html.Kendo().Grid<TfInvoicesReturnModel>()
.Name("invoiceGrid")
.DataSource(dataSource => dataSource
.Ajax()
.Sort(sort => sort.Add("OrderDate").Descending())
.Read(read => read.Action("Invoices_Read", "Jobs", new { JobNo = Model.JobNo, CustomerNo = Model.CustomerId }))
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(p => p.InvoiceNo);
})
)
.Columns(columns =>
{
columns.Bound(p => p.InvoiceNo).ClientTemplate(
"#if(BalanceDue > 0 && DueDate < " + @CurDate + ") {# " +
"<span style='color:red; font-weight:bold'>#: InvoiceNo #</span>" +
"#} else {#" +
"#: InvoiceNo #" +
"#} #"
).Title("Invoice").Width(125); ...
当我运行这个时,CurDate是正确的。但当然,由于DueDate的格式不同,因此比较无法正常工作。我如何才能做到这一点?有两种选择
1您可以在服务器上计算您的条件,并将bool变量传递给客户端,因此您的模板如下所示:
"#if(DateCheck) {# " +
"<span style='color:red; font-weight:bold'>#: InvoiceNo #</span>" +
"#} else {#" +
"#: InvoiceNo #" +
"#} #"
"#if(BalanceDue > 0 && DueDate < kendo.parseDate(" + @CurDate + ", YOUR_FORMAT)) {# " +
"<span style='color:red; font-weight:bold'>#: InvoiceNo #</span>" +
"#} else {#" +
"#: InvoiceNo #" +
"#} #"
行动发票如下:
...
.Select(w => new TfInvoicesReturnModel
{
...
DateCheck = w.BalanceDue > 0 && w.DueDate < DateTime.Now.Date
...
})
...
2您应该使用kendo.parseDate方法将DateTime属性转换为JS date,以便在客户端比较日期,因此您的模板如下所示:
"#if(DateCheck) {# " +
"<span style='color:red; font-weight:bold'>#: InvoiceNo #</span>" +
"#} else {#" +
"#: InvoiceNo #" +
"#} #"
"#if(BalanceDue > 0 && DueDate < kendo.parseDate(" + @CurDate + ", YOUR_FORMAT)) {# " +
"<span style='color:red; font-weight:bold'>#: InvoiceNo #</span>" +
"#} else {#" +
"#: InvoiceNo #" +
"#} #"
您可以通过将日期格式化为所需的格式来实现这一点 以下是如何:
kendo.toString(new Date(DueDate), "g") // for -> 11/6/2018 12:00 AM
这是最终起作用的代码:
columns.Bound(p => p.DueDate).ClientTemplate(
"#if(BalanceDue > 0 && new Date(DueDate) < getTodaysDate()) {# " +
"<span style='color:red; font-weight:bold'>#: kendo.toString(new Date(DueDate), 'MM/dd/yyyy') #</span>" +
"#} else {#" +
"#: kendo.toString(new Date(DueDate), 'MM/dd/yyyy') #" +
"#} #"
).Title("Due Date");
谢谢,@Carlos-成功了!虽然现在我将其添加到了使用.Format和指定格式的其他两列中,但这些列并未生效。如果需要的话,我可以在客户端模板中应用它的原因和方法,你能分享一下这种格式的预期结果吗?可能是共享新的列代码。我将这些列的格式放在客户端模板中,这样做很有效。谢谢columns.Boundp=>p.BalanceDue.ClientTemplate如果BalanceDue>0&&kendo.toStringnew DateDueDate,'MM/dd/yyyyy'<'+@CurDate+'{+:kendo.toStringBalanceDue,'c'+}其他{+:kendo.toStringBalanceDue,'c'+}.titlebalancedue.Width125.HtmlAttributesnew{style=text align:right;};我尝试了这个方法,删除了余额到期部分并替换了我自己的日期字段,但失败了,但我相信这是因为我的字段是可为空的datetime,而不仅仅是datetime。