Date 比较Kendo 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网格的客户端模板中的两个日期。以下是我所拥有的:

                @(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。