如何使用javaScript过滤日期?
我正在创建一个HTML报告,它必须根据日期选择显示订单详细信息。存储在JSON文件中的订单详细信息如下所示:如何使用javaScript过滤日期?,javascript,jquery,html,date,Javascript,Jquery,Html,Date,我正在创建一个HTML报告,它必须根据日期选择显示订单详细信息。存储在JSON文件中的订单详细信息如下所示: [ { "storeName": "ireland", "langCode": "en_IE", "testCaseName": "Guest User Checkout - Credit Card", "orderID": "4001820209", "date": "12-02-2019 15:37:30.201", "cartTo
[
{
"storeName": "ireland",
"langCode": "en_IE",
"testCaseName": "Guest User Checkout - Credit Card",
"orderID": "4001820209",
"date": "12-02-2019 15:37:30.201",
"cartTotal": "19.98"
},
{
"storeName": "denmark",
"langCode": "en_DK",
"testCaseName": "Guest User Checkout - Credit Card",
"orderID": "6001825084",
"date": "12-02-2019 15:37:35.140",
"cartTotal": "338 DKK"
},
{
"storeName": "united_kingdom",
"langCode": "en_GB",
"testCaseName": "Guest User Checkout - Credit Card",
"orderID": "7002541022",
"date": "13-02-2019 15:45:08.038",
"cartTotal": "13.04"
}
]
HTML报告如下所示:
我想从这个JSON文件中唯一地获取所有订单日期。时间需要删除,如果相同的日期已经添加到HTML中,则跳过它。HTML上的预期日期顺序应为:
- 12-02-2019
- 13-02-2019
- 14-02-2019
function myFunction() {
createList();
$.getJSON('order-detail.json', function (item) {
item.forEach(function (data) {
addItemsInList(data);
});
});
}
创建未排序的列表
function createList() {
var ul = document.createElement('ul');
ul.setAttribute('id', 'order-dates');
var div = document.getElementById('orderDateContainer');
div.appendChild(ul);
}
在列表中添加日期
function addItemsInList(data){
var ul = document.getElementById('order-dates');
li = document.createElement('li');
li.setAttribute('class', 'ord-date');
ul.appendChild(li);
var a = document.createElement('a');
a.setAttribute('class', 'record-viewer');
a.setAttribute('href','#recordContent');
a.innerHTML=data.date;
a.setAttribute('onclick','tableCreater()');
li.appendChild(a);
}
任何帮助都将不胜感激。您可以使用js解析日期,这样您就可以更改日期格式,使用日期对象处理事情,并通过
或者您可以使用substring通过dateTimeString.substr(0,10)
const datetime\u dates=[
"12-02-2019 15:37:30.201",
"12-02-2019 15:37:30.201",
"13-02-2019 15:37:30.201",
"13-02-2019 15:37:30.201",
"13-02-2019 15:37:30.201",
"14-02-2019 15:37:30.201",
];
const get_unique_dates=(日期)=>{
const dates_only=dates.map(日期=>时刻(日期,“DD-MM-YYY HH:MM:ss.SSS”).格式(“DD-MM-YYYY”);
const unique_dates=[…新设置(仅日期)];
返回唯一的_日期;
}
日志(获取唯一的日期(日期时间日期));
//以您的数据为例
常量命令=[
{
“店名”:“爱尔兰”,
“语言代码”:“en_IE”,
“testCaseName”:“来宾用户结账-信用卡”,
“订单ID”:“4001820209”,
“日期”:“12-02-2019 15:37:30.201”,
“总计”:“19.98”
},
{
“店名”:“丹麦”,
“语言代码”:“en_DK”,
“testCaseName”:“来宾用户结账-信用卡”,
“订单ID”:“6001825084”,
“日期”:“12-02-2019 15:37:35.140”,
“总计”:“338丹麦克朗”
},
{
“店名”:“英国”,
“语言代码”:“en_GB”,
“testCaseName”:“来宾用户结账-信用卡”,
“订单ID”:“7002541022”,
“日期”:“13-02-2019 15:45:08.038”,
“总计”:“13.04”
}
]
const order_dates=orders.map(order=>order.date);
const unique_order_dates=获取唯一日期(order_dates);
console.log(唯一的订单日期)代码>
只需对现有函数稍作修改,就只能循环使用唯一的日期并像以前一样添加它们
在myFunction
中,我们现在将数据简化为唯一的日期字符串,去掉时间。减速机的逻辑被提取到collectIfUniqueDateFromOrder
函数中
function myFunction() {
createList();
$.getJSON('order-detail.json', function (data) {
const uniqueDateStrings = data.reduce(collectIfUniqueDateFromOrder, []);
uniqueDateStrings.forEach(addItemsInList);
});
}
function collectIfUniqueDateFromOrder (uniqueDates, order) {
var dateStringWithoutTime = order.date.split(" ")[0];
if (!uniqueDates.includes(dateStringWithoutTime)) {
uniqueDates.push(dateStringWithoutTime);
}
return uniqueDates;
}
在addItemsInList
中,我们只处理日期字符串
function addItemsInList(dateString) {
var ul = document.getElementById('order-dates');
var li = document.createElement('li');
li.setAttribute('class', 'ord-date');
ul.appendChild(li);
var a = document.createElement('a');
a.setAttribute('class', 'record-viewer');
a.setAttribute('href', '#recordContent');
a.innerHTML = dateString; // <--
a.setAttribute('onclick', 'tableCreater()');
li.appendChild(a);
}
函数addItemsInList(日期字符串){
var ul=document.getElementById('order-dates');
var li=document.createElement('li');
li.setAttribute('class','ord date');
ul.儿童(li);
var a=document.createElement('a');
a、 setAttribute('class','record viewer');
a、 setAttribute('href','#recordContent');
a、 innerHTML=dateString;//你说的唯一是什么意思?日期应该显示为12-02-2019
然后13-02-2019
等等。时间应该被删除。。我明白了,你给每个元素分配了相同的id,而id意味着唯一。所以将id分配为“订单日期”+索引,然后使用相同的方法将日期添加到每个元素。抱歉,我没有看到。忽略。添加一个工作片段将帮助我们更轻松地解决您的问题。TypeError:data.date.map在我的情况下不是一个函数
,即使我添加了moment.min.js添加一个带有订单数据的示例。实际上,您也可以通过sli获取日期字符串如果不需要使用date对象处理,请将datetime字符串还原。不需要使用日期库来执行此操作,日期将按字符串排序。与date.split(“”)[0]
或date.substr(0,10)
相比,将日期转换为日期,然后再转换回字符串以精简时间效率非常低。