首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在jsgrid中对时间列进行排序?

如何在jsgrid中对时间列进行排序?
EN

Stack Overflow用户
提问于 2022-10-20 10:19:26
回答 2查看 79关注 0票数 1

我们正在使用jqgrid绑定一个表。我们将第一列作为12小时格式的时间列开始。我们在对这些数据进行排序时面临一个问题。数据的排序是正确的,但没有考虑到am/pm。下面是我们绑定jqgrid的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var newFieldsArray =
        [
            { name: "ID", title: "ID", type: "number", width: "50px", visible: false },
            {
                name: "TimeStart", title: "Start", type: "customTime", width: "100px", validate: "required",
                sorttype: "date",
                formatter : {     
                    date : {       
                    AmPm : ["am","pm","AM","PM"],       
                    }     
                },
                // datefmt: "m/d/Y h:i A",
                //sorttype: 'datetime', formatter: 'date', formatoptions: {newformat: 'd/m/y', srcformat: 'Y-m-d H:i:s'},
                insertTemplate: function () {
                    var $result = jsGrid.fields.customTime.prototype.insertTemplate.call(this); // original input

                    $result.val(varendTime);

                    return $result;
                },
                itemTemplate: function (value, item) {
                    return "<b style='display:none'>" + Date.parse(item.StartDate) + "</b><span>" + (item.TimeStart) + "</span>";
                }
            },
            {
                name: "TimeEnd", title: "End", type: "customTime", width: "100px", validate: "required",sorttype: "date", datefmt: "h:i"
            },
            { name: "TimeTotal", title: "Time", type: "text", width: "50px", readOnly: true },
            {
                name: "CoilPO", title: "Coil PO", type: "text", width: "50px", validate: "required",
                insertTemplate: function () {
                    var $result = jsGrid.fields.text.prototype.insertTemplate.call(this); // original input

                    $result.val(varlot);

                    return $result;
                }
            },
            { name: "Joints", title: "Joints", type: "integer", width: "60px" },
            { name: "CommercialGrade", title: "Commercial Grade", type: "integer", width: "80px" },
            { name: "QAHold", title: "QA Hold", type: "integer", width: "60px" },
            { name: "Rejected", title: "Reject", type: "integer", width: "60px" },
            { name: "ActionTaken", title: "Reason of Delay / Action Taken", type: "text", width: "120px" },
            {
                name: "ClassId", title: "Class",
                type: "select", items: classDataArr,//classData.filter(function(n){return classdt.indexOf(n.Id) != -1 }),//classData,
                valueField: "Id", textField: "Title",
                insertTemplate: function () {
                    debugger;
                    var taxCategoryField = this._grid.fields[12];
                    var $insertControl = jsGrid.fields.select.prototype.insertTemplate.call(this);

                    var classId = 0;
                    var taxCategory = $.grep(voiceData, function (team) {
                        return (team.ClassId) === classId && (team.StationId) == parseInt($('#ddlEquipmentName').val());
                    });
                    taxCategoryField.items = taxCategory;
                    $(".tax-insert").empty().append(taxCategoryField.insertTemplate());

                    $insertControl.on("change", function () {
                        debugger;
                        var classId = parseInt($(this).val());
                        var taxCategory = $.grep(voiceData, function (team) {
                            return (team.ClassId) === classId && (team.StationId) == parseInt($('#ddlEquipmentName').val());
                        });
                        taxCategoryField.items = taxCategory;
                        $(".tax-insert").empty().append(taxCategoryField.insertTemplate());
                    });

                    return $insertControl;
                },
                editTemplate: function (value) {
                    var taxCategoryField = this._grid.fields[12];
                    var $editControl = jsGrid.fields.select.prototype.editTemplate.call(this, value);

                    var changeCountry = function () {
                        var classId = parseInt($editControl.val());
                        var taxCategory = $.grep(voiceData, function (team) {
                            return (team.ClassId) === classId && (team.StationId) == parseInt($('#ddlEquipmentName').val());
                        });
                        taxCategoryField.items = taxCategory;
                        $(".tax-edit").empty().append(taxCategoryField.editTemplate());
                    };
                    debugger;
                    $editControl.on("change", changeCountry);
                    changeCountry();
                    return $editControl;
                }
            },
            {
                name: "VoiceId", title: "Voice", type: "select", items: voiceData,
                valueField: "Id", textField: "Title", width: "120px", validate: "required",
                insertcss: "tax-insert",
                editcss: "tax-edit",
                itemTemplate: function (teamId) {
                    var t = $.grep(voiceData, function (team) { return team.Id === teamId; })[0].Title;
                    return t;
                },
            },
            { name: "Remarks", title: "Remarks", type: "text", width: "110px" },
            { name: "control", type: "control" }
        ];

    hoursGrid.jsGrid("option", "fields", newFieldsArray);

下面是我们排序时出现的两个数据截图:

有人能告诉我我们做错了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2022-10-26 15:18:55

你把jsGrid和jqGrid混在一起了。在jsGrid中实现它的方法是使用内置分类器jsGrid.sortStrategies.date,我在下面添加了一个示例。

正如@ Tomov ( jqGrid的创建者)所评论的,您使用的是jsGrid,而不是jqGrid。这一点在您的代码和屏幕截图中的UI中都很明显。

具体来说,您使用了jqGrid的日期分类器,并在您的jsGrid代码中使用了它,但是(当然)这里不支持它。您可以继续在jsGrid源中查找您使用的AmPm,并看到它不在那里。

那么如何在jsGrid中实现呢?

只需将内置分类器jsGrid.sortStrategies.date传递给sorter属性即可。但是,它确实需要Date对象,所以如果只有时间字符串,就必须将它们转换为日期。

下面是一个快速演示(小提琴),单击日期列标题进行排序:

  • 请注意,getData获得一个函数参数,该参数负责将所有数据作为Date对象获取,isUTC的值取决于您是否实际使用它$(document).ready(function () { const dataFunc =getDataTimes);$("#jsGrid").jsGrid({宽度:"100%",数据: getData(dataFunc),排序: true,字段:{ name:"name",类型:"text",宽度: 50 },{ name:“日期”,键入:“日期”,宽度: 50,分类器: jsGrid.sortStrategies.date,cellRenderer:(value,item) => { const withYear = false;const isUTC = dataFunc == getDataTimes;返回renderDateTime(value,item,withYear,isUTC);}};};函数getData(getDates) { const = {name:"a"},{name:"b"},{name:"c"},{name:"d"},{name:"e"},{name:"f"};const = getDates();for (设i= 0;i< dates.length;i++) { datai.date = datesi;}返回数据;函数getDataDates() { const date1 =新日期(2022,10,1,4,50);const date2 =新日期(2022,10,1,8,50);const date3 =新日期(2022,10,1,15,50);const date4 =新日期(2021,10,1,4,50);const date5 =新日期(2021,10,1,8,50);const date6 =新日期(2021,10,1,15,50);返回date1,date2,date3,date4,date5,date6;} function getDataTimes() { const time1 = "3:50 AM";const time2 = "8:50 AM";const time2= "4:50 AM";const time4 = "3:50 PM";const time5 = "8:50 PM";const time6 = "4:50 PM";const time6=“time1,time2,time3,time4,time5”;返回(t en21#(T));}函数convertTime12to24(time12h) { const,修饰符= time12h.split(‘');让小时,分钟= time.split(':');if (修饰符=== 'PM') { let =parseInt(小时,10) + 12;}返回新日期(Date.UTC(2022,0,1,小时,分钟));}函数renderDateTime(值、行、withYear、isUTC) {返回<td>${getDateTimeAsString(value, withYear, isUTC)}</td>;函数getDateTimeAsString(date,withYear,isUTC) { var options ={h:‘数值’,分钟:‘数值’,hour12: true };if (withYear) { options.withYear =‘options.withYear’;} if (isUTC) { options.timeZone = 'UTC';}返回date.toLocaleString('en-US',选项);}
票数 0
EN

Stack Overflow用户

发布于 2022-10-30 05:42:04

让我试试看,我们有两个选项可以在JsGrid中执行排序操作:1.自定义字段(主题名称,请参阅下面的链接)引用链接:http://js-grid.com/docs/#grid-fields

在这种情况下,您可以在您的配置中定义自定义属性并对其进行扩展。您可以使用sorter属性并调用您的用户定义的函数,您可以通过逻辑直接用时间戳对日期进行排序。

2.排序策略(主题名称,请参阅以下链接)参考链接:http://js-grid.com/docs/#grid-fields

在这种情况下,您可以创建您的自定义对象,然后将日期排序策略直接应用到对象上,以便根据您的逻辑执行排序操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74144580

复制
相关文章
Mac OSX 中java7 java8环境的配置
这说明我的机器上装了两个版本的 jdk ,当前 jdk 版本是 8 版本。 另外,在配置之前,需要查看目录
故久
2019/09/29
6890
Mac OSX安装MongoDB
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。与此同时,它也为开发人员 提供了传统数据库的功能:二级索引,完整的查询系统以及严格一致性等等。 MongoDB能够使企业更加具有敏捷性和可扩展性,各种规模的企业都可以通过使用MongoDB来创建新的应用,提高与客户之间的工作效率,加快产品上市时间,以及降低企业成本。
xiangzhihong
2022/11/30
8490
Mac OSX 安装 MongoDB
MongoDB是由C++语言编写,开源而且基于分布式文件存储的介于关系数据库和非关系数据库之间的产品;在高负载的情况下,通过添加更多节点保证服务器性能;旨在为WEB应用提供可扩展的高性能数据存储解决方案;以文档的形式存储数据,数据结构由键值对(key / value); 其文档类似 JSON 对象,字段值可以包含其他文档、数组以及文档数组。
xiangzhihong
2022/12/21
7390
Mac OSX 安装 MongoDB
打开Mac OSX原生的NTFS功能
很多同学都会为如何在Mac下写入NTFS格式的磁盘而感到困惑,因为默认情况下,把一个NTFS格式的磁盘插入到Mac里,是只能读不能写的。用起来肯定很郁闷,很多同学也因此把移动硬盘分成了双分区,一个NTFS,一个HFS。其实在Mac下完全是可以写NTFS磁盘的
twelvecoder
2021/12/24
1.2K0
消除JAVA编程中的坏味道
序列化 谨慎的实现Serializable接口 实现Serializable最大的代价,一旦这个类被发布就大大降低了改变这个类实现的灵活性,这个类中所有私有实例域都将变成导出API的一部分,不符合最低限度访问域的实践原则 UID流的唯一标识符,如果没有就会自动产生,受类名称接口名称等影响而变化,如果没有显示声明新版本的类反序列化旧版本会InvaildClassException. 实现序列化增加了出现bug的安全漏洞的可能性,增加了兼容性测试负担. 一般来说值类应当实现Serializable,活动实
用户9580384
2022/10/05
8970
消除JAVA编程中的坏味道
WordPress主题Mac osX 2.03
在Mac osX2.02基础上,修正了一些BUG,添加了滑动门按钮,主题2.03a和2.03b左侧日志改为通栏,2.03c和2.03d为分栏,首页显示摘要和显示全文共四个版本。建议下载使用新版!经测试,发现独立页面模板下面的动态导航与部分插件有冲突,目前发现与Lightbox和Clean Archives Reloaded两个插件有冲突,如果发现动态导航没有正常显示或提示有错误,可禁用插件试一下。感谢网友aunsen的测试。
星哥玩云
2022/06/11
9170
Mac OSX 平台安装 MongoDB
安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:
OwenZhang
2021/12/08
7870
Mac OSX 平台安装 MongoDB
Install Scrapy on OSX|mac OSX 上安装Scrapy[SYN:gejoin.com]
顺利的话,一句命令搞定: sudo pip install Scrapy OSX还是需要额外一些包或升级的,包括:
gigiwangs
2019/03/01
7930
Mac OSX 上安装yarn
如果从来没改过这个.bash_profile文件(可能会提示你“已锁定”),你可能需要先把这个文件的内容复制到另一个txt(其它类型)文件中,之后:
全栈程序员站长
2022/09/01
1.6K0
Mac OSX 上安装yarn
WordPress主题Mac osX 2.02
这是一款仿Mac osx外观的Wordpress杂志型主题。首页可以添加自定义图片并显示日志摘要,主题包含两套主页面模板。通过主流浏览器测试。独立页面模板下面仿Mac osx的动态dock导航,由于IE6不支持透明PNG图片,而采用GIF图片,效果差了些。
星哥玩云
2022/06/11
1.1K0
WordPress主题Mac osX 2.02
ImageMagick and JMagick install on Mac OSX
接的遗留代码,在本地运行,有jmagick-6.4.0.jar 但是出现错误: javax.servlet.ServletException: java.lang.NoClassDefFoundError: Could not initialize class magick.ImageInfo main里新建一个ImageInfo 则出现错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: no JMagick in java.libr
架构师刀哥
2018/03/20
1.8K0
Mac OSX网络诊断命令
下面是一些Mac OSX下常用的网络诊断命令。它们能帮助我们发现网络问题。文中提到的协议和网络通信原理,可参考协议森林。 有些工具,如arping, arp-scan,需要借助HomeBrew安装。 基本工具 网络诊断的第一步,是了解自己的设备,比如有哪些接口,IP地址都是什么。 ifconfig 显示网络接口(interface)信息。如接口名称,接口类型,接口的IP地址,硬件的MAC地址等。 ARP ARP协议用在局域网(LAN)内部。借用ARP协议,设备可以知道同一局域网内的IP-MAC对应关系。当我
Vamei
2018/01/18
2.2K0
Mac OSX 平台 MongoDB 的安装及管理
可以直接在官网下载社区版:https://www.mongodb.com/try/download/community
叙帝利
2021/01/07
3.5K0
Mac OSX 平台 MySql 的安装及维护
安装完成之后在【系统偏好设置】中会有一个 MySql 的图标,点进去可以启动或者结束 MySql 服务。
叙帝利
2021/01/07
1.1K0
Mac OSX使用 daocloud提供的Docker镜像
由于直接使用官方提供的 docker hub 仓库地址下载镜像非常慢, 所以改用国内的镜像是加速镜像下载的方法, 我使用的是 DaoCloud 提供的 docker hub 镜像. 使用 DaoCloud 的镜像得先注册一个 DaoCloud 的账号,DaoCloud官网 注册完成登录到控制台, 有个 加速器 的标签, 点击进去, 然后点击 立即使用 , 类型选择 MacOS 这时候会生成一个镜像地址. 拿到镜像地址以后修 boot2docker 的配置文件. 通过命令 boot2docker config
zcqshine
2018/05/11
1.2K0
Linux 、Mac OSX 常见问题 及 笔记
Linux的很多命令都是依赖libc.so.6的动态链接库,如果不小心把它删除了,基本上所有命令都不能使用
用户2836074
2018/08/15
5760
Mac OSX 下build VLC工程记录
对VLC突然来了好奇心,所以像研究一下VLC,但是首先要编译一下VLC,将应用编译出来然后测试才能更顺利; 在网上找了一下,几乎没有可用的,算了,看别人转帖的blog还不如自己琢磨了,然后就参考官方文档,自己仔细研究一下,通过了。 在最开始编译的时候遇到了问题,编译不过去,参考了官方文档后发现也会报错,后来尝试了一下,凑巧通过了,记录一下 系统基本信息:
用户3765803
2019/03/05
2.2K0
发布WordPress主题Mac osX 2.1
这款Mac osx风格的Wordpress主题,在原版基础上,经过多次调整修改,重写了部分结构及CSS,添加可以自定义的导航下拉菜单;解决与部分插件冲突问题;更换可以显示标题的flash幻灯;优化图片及代码,并通过W3C验证!正式发布2.1版。
星哥玩云
2022/06/11
6130
远程管理 Mac OSX 设备
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
soulteary
2023/03/05
8320
远程管理 Mac OSX 设备
Mac OSX Guest账号无法登录
https://img.h4ck.org.cn/wp-content/uploads/2020/02/osx_guest.mp4
obaby
2023/02/24
1.5K0

相似问题

基于javax.sound.midi的OSX Midi器件

16

Swing菜单Java 7 mac osx

10

编译Java小程序(Mac OSX)

27

用MIDI键盘OSX控制AudioUnit

26

mac osx中的Java 7路径

129
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文