找回密码
 立即注册

QQ登录

只需一步,快速开始

artman5545

中级会员

31

主题

93

帖子

901

积分

中级会员

积分
901
artman5545
中级会员   /  发表于:2018-3-23 16:04  /   查看:4314  /  回复:3
本帖最后由 artman5545 于 2018-3-26 17:05 编辑

QQ图片20180323155731.png
如图所示,点击保存按钮的时候我获取列表数据中日期格式单元格的时候出现日期格式不一致的情况
手动填写的日期格式是/OADate()/,后台绑定的日期格式/Date()/。
我分别在表单中绑定了formatter("yyyy/mm/dd")和 GC.Spread.Sheets.DataValidation.createDateValidator(GC.Spread.Sheets.ConditionalFormatting.ComparisonOperators.between, new Date("1900/01/01"), new Date("3999/12/31"))
代码如下:
var data = spread.toJSON({ includeBindingSource: true });
        var columns = data.sheets.Sheet1.columns;
        var dataSource = { tid: tid };
        $.each(data.sheets.Sheet1.data.dataTable, function (i, item) {
            $.each(item, function (j, field) {
                var value = field.value || null;
                if (field.style && field.style.formatter == "yyyy/mm/dd" && field.value) {
                    var dateValue = parseFloat(value.match(/OADate\((\S*)\)/)[1]);
                    value = new Date(new Date().setTime(Math.round(dateValue * 24 * 60 * 60 * 1000) + Date.parse("1899-12-30"))).format("yyyy-MM-dd");
                }
                dataSource["data[" + i + "]." + columns[j].name] = value;
            })
        });

3 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-23 18:35:49
沙发
这个是autoformatter的问题,跟Excel一样,如果您不设置任何单元格格式,spreadjs会根据您输入的内容自动匹配一种格式。解决办法是手动设置这一列的formatter
回复 使用道具 举报
artman5545
中级会员   /  发表于:2018-3-26 08:52:39
板凳
我设置过格式的,难道我手动修改单元格值后还要重新设置一下格式吗?
                sheet.getRange(0, 6, rowCount, 5).formatter("yyyy/mm/dd");
                sheet.getRange(0, 12, rowCount, 2).formatter("yyyy/mm/dd");
                sheet.getRange(0, 16, rowCount, 8).formatter("yyyy/mm/dd");
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-3-26 16:58:03
地板
这样您可以取值过后写一个判断,去判断一下对应的是不是date类型,如果是正常处理,如果不是,那就进行OADATE与date类型的转换。因为绑定中默认是按照后台传入的数据源来的,但是一旦用户输入,就会按照spreadjs的处理方式转换为OADATE。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部