如何使用javaScript过滤日期?

如何使用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

我正在创建一个HTML报告,它必须根据日期选择显示订单详细信息。存储在JSON文件中的订单详细信息如下所示:

[
  {
    "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
如果用户在该特定日期单击,则应显示该日期下的所有订单

我在下面编写了jQuery/javascript函数来读取日期并添加到html中,但不确定如何使它们唯一

这将在页面加载时调用

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)
    相比,将日期转换为日期,然后再转换回字符串以精简时间效率非常低。