如何使用javaScript过滤日期?

时间:2019-02-20 08:50:44

标签: 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",
    "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报告如下所示:

enter image description here

我想唯一地获取此JSON文件中的所有订单日期。需要删除时间,如果HTML中已经添加了相同的日期,请跳过该时间。 HTML上的预期日期顺序应为:

  • 2019年2月2日
  • 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);
}

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

只需对现有功能进行少量修改,就只能循环唯一的日期并像以前一样添加它们。

  1. 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;
    }
    
  2. 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);
    }
    

答案 1 :(得分:-2)

您可以使用moment js解析日期,以便可以更改日期格式并使用date object处理内容,并通过Set获得唯一列表

OR ,您可以使用子字符串通过dateTimeString.substr(0,10)

获取日期

const datetime_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 = (dates) => {
  const dates_only = dates.map(date => moment(date, "DD-MM-YYY HH:mm:ss.SSS").format("DD-MM-YYYY"));

  const unique_dates = [...new Set(dates_only)];
  return unique_dates;
}
console.log(get_unique_dates(datetime_dates));

// example with your data
const orders = [
  {
    "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"
  }
]

const order_dates = orders.map(order => order.date);
const unique_order_dates = get_unique_dates(order_dates);
console.log(unique_order_dates);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

对于过滤,最好在后端执行此操作,以提高性能,每次用户单击您的date link时都请求ajax