【问题标题】:Calculate date time difference in tabulator row operation计算制表行操作中的日期时间差
【发布时间】:2021-02-18 23:12:47
【问题描述】:

我有一个场景,我想计算两行之间的时间差(以分钟为单位)并将数据放在连续行中。我正在使用tabulator。 目前,我已经完成了用于列的 custom formatters 的定义,但我不确定如何在行上实现这种情况。但是我尝试了以下选项,但它似乎不起作用。

var table = new Tabulator("#editor", {
        downloadConfig:{
            columnGroups:false, 
            rowGroups:false,
        },
        height:360, 
        data: arrayFlight,
        pagination:"local",
        resizableColumns: false,
        paginationSize:12,
        columnVertAlign:"center",
        columnHoriAlign:"center",
        columns:[
                {title:"Start time", field:"sTime", align:"center", formatter:"datetime", formatterParams:{inputFormat:"DD-MM-YYYY hh:mm:ss", outputFormat:"DD-MM-YYYY hh:mm:ss", invalidPlaceholder:"-"}, sorter:false, headerSort:false, width:95},
                {title:"End time", field:"eTime", align:"center", formatter:"datetime", formatterParams:{inputFormat:"DD-MM-YYYY hh:mm:ss", outputFormat:"DD-MM-YY hh:mm:ss", invalidPlaceholder:"-"}, sorter:false, headerSort:false, width:95},
                {title:"Duration", field:"durTime", align:"center", calc: sTime-eTime, sorter:false, headerSort:false, width:95},
                ],
            },  
        ],

以下是我想将其可视化的方式:

非常感谢任何帮助。

【问题讨论】:

  • Mutators
  • @AdrianKlaver 我看了但不太明白,请你帮忙详细说明它如何与行操作一起工作。
  • 看看这个fiddle
  • @AdrianKlaver 这里Diff字段的值在编辑后不会改变,当我在数据加载后编辑字段start timefinish time中的值时。
  • @olifolkerd 你能帮忙吗

标签: javascript html tabulator tabulator-py


【解决方案1】:

正如@Adrian Klaver 所说,正确的方法是使用Muataor 来计算新列的值

正如@adrian 已经说过的,你看到的错误与他的提议无关。

基本上,您首先要创建一个 mutator 函数,该函数将接收行数据,然后根据该行数据为该列返回一个新值。

var durationMutator = function(value, data){
    //value - original value of the cell
    //data - the data for the row

    var start = new Date(data.sTime);
    var end = new Date(data.eTime);

    return end - start ;
}

然后,您可以将其分配给 mutator 属性上的持续时间列:

{title:"Duration", field:"durTime", mutator:durationMutator},

这就是你需要做的所有事情。

【讨论】:

  • 当我编辑单元格时,数据会随着上述实现而动态变化吗?
  • AFAIK,不,因为 mutator 仅在 durTime 字段上工作。正如我在第二个小提琴中展示的那样,您需要将 mutatorEdit 放在您编辑的字段上。
  • @AdrianKlaver 好的,那么if (type == "edit"){ console.log('edit'); component.getRow().getCell("timeDiff").setValue(new_value); return value; //return the new value for the cell data. }else{ return new_value }} 的作用是什么,因为这里我收到了Uncaught (in promise) ReferenceError: type is not defined 的错误
  • 没有上下文的代码片段没有用。您将需要显示您在上面使用的整个代码部分。
  • @AdrianKlaver 这里是完整的代码 [link]github.com/Codeout256/tabulatorview/blob/main/index.html 并定义了上下文。每当我使用您为type==edit 提供的小提琴代码时,它都会显示错误type is not defined。你能帮忙吗
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
相关资源
最近更新 更多