英文:
Datatble datetime field is sorted as string
问题
我有一个用于我的Django Web应用程序的数据表格,后端发送的"updated"字段的日期格式为'Feb. 14, 2023, 3:58 p.m.'。当我使用排序功能时,它总是按字母顺序排序,其中'April 24, 2023, 10:04 a.m.'在'Feb'之前,因为在字母顺序中,A大于F,所以如何解决这个问题?我尝试了一些来自Datatable jQuery文档和一些StackOverflow答案,但它没有给我想要的输出。
英文:
I have a Datatble for my django web app, the backend sends date for the field updated as 'Feb. 14, 2023, 3:58 p.m.'. when I use the sorting feature, it always sorts as alphabetical order, where 'April 24, 2023, 10:04 a.m.' comes before Feb because A is bigger than F in alphabetical order, so how to solve this? I tries some from datatble jquery documentation and some StackOverflow answers but it didn't gave me the desired output
答案1
得分: 0
在导入 jQuery 后,导入 moment.js,并添加以下脚本:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
然后添加以下脚本:
<script type="text/javascript">
$("#datatble_id").DataTable({
columnDefs: [
{
targets: [0], // 你的字段位置
type: 'datetime',
render: function (data, type, row, meta) {
var momentObj = moment(data, 'MMM. DD, YYYY, h:mm a');
if (type === 'sort') {
return momentObj.unix();
}
return momentObj.format('MMM. DD, YYYY, h:mm a');
},
orderable: true
}
]
});
</script>
英文:
after jquery importing, import momentjs
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
and add this script
<script type="text/javascript">
$("#datatble_id").DataTable({
columnDefs: [
{
targets: [0], // your field position
type: 'datetime',
render: function (data, type, row, meta) {
var momentObj = moment(data, 'MMM. DD, YYYY, h:mm a');
if (type === 'sort') {
return momentObj.unix();
}
return momentObj.format('MMM. DD, YYYY, h:mm a');
},
orderable: true
}
]
});
</script>
答案2
得分: 0
以下是已翻译的内容:
使用这段PostgreSQL代码。
使用虚拟表格
创建表格test (
datex文本
)
插入数据
插入到test (datex)值('2023年2月14日下午3:58');
插入到test (datex)值('2023年4月24日上午10:04');
选择*,
split_part(datex, ' ', 1),--获取月份字符串
rtrim(split_part(datex, ' ', 2),','),--获取日期字符串
rtrim(split_part(datex, ' ', 3),','),--获取年份字符串
EXTRACT(MONTH FROM TO_DATE(split_part(datex, ' ', 1), 'Mon')),--将月份转换为数字
(rtrim(split_part(datex, ' ', 3),',')||'-'||TO_CHAR(EXTRACT(MONTH FROM TO_DATE(split_part(datex, ' ', 1), 'Mon')), 'fm00')||'-'||rtrim(split_part(datex, ' ', 2),','))::日期 as newdat
来自测试排序的
我使用"split part"函数拆分字符串,然后将其转换为日期列。
然后使用"order by"对日期列进行排序。
英文:
Use this postgres Code.
use dummy table as
create table test (
datex text
)
Insert data
insert into test (datex) values ('Feb. 14, 2023, 3:58 p.m.');
insert into test (datex) values ('April 24, 2023, 10:04 a.m.');
select * ,
split_part(datex, ' ', 1),--get Month string
rtrim(split_part(datex, ' ', 2),','),--get day string
rtrim(split_part(datex, ' ', 3),','),--get year string
EXTRACT(MONTH FROM TO_DATE(split_part(datex, ' ', 1), 'Mon')),--convert month into number
(rtrim(split_part(datex, ' ', 3),',')||'-'||TO_CHAR(EXTRACT(MONTH FROM TO_DATE(split_part(datex, ' ', 1), 'Mon')), 'fm00')||'-'||rtrim(split_part(datex, ' ', 2),','))::date as newdat
from test order by newdat
> I split the string using the "split part" function, then converted into the date column.
> After that use "order by" to sort the date column.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论