剑道 jQuery 电子表格日期值保存

Posted

技术标签:

【中文标题】剑道 jQuery 电子表格日期值保存【英文标题】:Kendo jQuery Spreadsheet Date Values on Save 【发布时间】:2019-01-23 17:03:51 【问题描述】:

所以我有一个绑定到远程数据源的 Kendo jQuery 电子表格。电子表格中的字段也是数据驱动的,所以我有一个流程,它将遍历所有列并根据数据类型对列应用验证。当我将验证应用于日期值时,似乎所有值都转换为 javascript Date 对象。

这给我带来了两个问题。 1. 当我去保存数据时,它会将日期对象发送到服务器,而不是mm/dd/yyyy 的字符串。 2. 将空白值视为12/30/1899

这是我使用的部分代码:

var record_id = 1;
var columnData = 
    field_name1: "title":"FIELD1", "type":"string", "width":50, "order":0,
    field_name2: "title":"FIELD2", "type":"date", "width":50, "order":1
;
var columnMap = ['field_name1', 'field_name2'];

// The following code executes in the event that is triggered when the data is successfully read.
function readSource(e) 
    $.ajax(
        url: './spreadsheet.php',
        data:  id: record_id, action: 'list' ,
        dataType: 'json',
        method: 'POST',
        success: function(result) 
            e.success(result);
            $.each(columnData, function(field, data) 
                var range = toColumnName(columnMap.indexOf(field) + 1) + '2:' + toColumnName(columnMap.indexOf(field) + 1) + (result.count + 1);
                var validator = false;
                var format = '';
                switch (data.type) 
                    case 'date': 
                        validator = 
                            dataType: 'date',
                            comparerType: 'between',
                            from: 'DATEVALUE("1/1/2000")',
                            to: 'DATEVALUE("1/1/2100")',
                            allowNulls: true,
                            showButton: true,
                            type: 'reject',
                            titleTemplate: 'Date Error',
                            messageTemplate: 'Enter a valid date between 1/1/2000 and 1/1/2100.'
                        ;
                        format = 'mm/dd/yyyy';
                        break;
                   
                
                if (validator !== false) 
                    sheet.range(range).validation(validator);
                
                if (format === '') 
                    sheet.range(range).format(format);
                
            );
        
    );


// On save
function submitSource(e) 
    $.ajax(
    url: './spreadsheet.php',
    data:  action: 'update', id: record_id, records: e.data ,
    method: 'POST',
    dataType: 'json',
    success: function (result) 
        e.success(result.Updated, 'update');
        e.success(result.Created, 'create');
        e.success(result.Destroyed, 'destroy');
    


// Convert index to column letter (1 => 'A', 27=>'AA')
function toColumnName(num) 
    for (var ret = '', a = 1, b = 26; (num -= a) >= 0; a = b, b *= 26) 
        ret = String.fromCharCode(parseInt((num % b) / a) + 65) + ret;
    
    return ret;

我将包含一个link to a screenshot,它显示当我单击保存按钮时应该为空白的单元格会发生什么情况。图像中的第一行包含已填充的日期。下面的行是空白的。

需要进行哪些更改才能将适当的日期值发送回服务器,如何避免出现空白问题?

【问题讨论】:

【参考方案1】:

电子表格.php 代码可能没有正确格式化日期。

1899 年 12 月 30 日是 Microsoft Excel 和其他软件的纪元日期: https://en.wikipedia.org/wiki/Epoch_(reference_date)#Notable_epoch_dates_in_computing

所以你可能输入值“1”而不是 null。

【讨论】:

我在开发者工具中查看了服务器的响应。我可以确认空白的值为空,非空白的值为“yyyy-mm-dd”格式。

以上是关于剑道 jQuery 电子表格日期值保存的主要内容,如果未能解决你的问题,请参考以下文章

google docs电子表格导出:如何从时间、日期中删除撇号[关闭]

如何在 Google 电子表格中使用日期添加功能?

如何从谷歌电子表格中动态变化的单元格中保存最小值和最大值?

用电子在本地保存html表格数据

电子表格里面日期怎么批量修改

带有文本的 Jquery 表排序器日期提取