Я не знаю, как выглядят ваши данные, но, вообще говоря, вам нужно выполнить два шага:
new Date()
:
new Date("2018-06-12"); // -> Tue Jun 12 2018 01:00:00 GMT+0100
new Date("2018-07-13"); // -> Fri Jul 13 2018 01:00:00 GMT+0100
Фильтрация прошлых событий может быть выполнена с помощью Array.filter
. Вы даете ему функцию, которая возвращает True
или False
, и запускает ее для каждого элемента массива. Элементы, для которых возвращенный functiuon True
помещается в новый массив:
[1, 3, 4, 6, 7].filter(number => number > 4); // -> [6, 7]
[1, 3, 4, 6, 7].filter(number => number <= 4); // -> [1, 3, 4]
Итак, чтобы фильтровать прошлые даты / время, вы просто сравниваете их с сегодняшней датой. Единственная сложность в том, что предоставление строки, такой как 2018-06-07
(только дата, без указания времени) на new Date(…)
, устанавливает время на текущее:
new Date("2018-06-07"); // -> Thu Jun 07 2018 01:00:00 GMT+0100
Если вам нужно сравнить только по дней, а не часов или даже минут, удобно установить время до полуночи:
(new Date("2018-06-07")).setHours(0) // -> Thu Jun 07 2018 00:00:00 GMT+0100
Итак, когда собрано:
const data = {
events: [
{ name: "Event 1", date: "2018-06-12" },
{ name: "Event 2", date: "2018-07-10" },
{ name: "Event 3", date: "2018-07-12" },
{ name: "Event 4", date: "2018-07-13" },
{ name: "Event 5", date: "2018-08-01" }
]
}
const today = (new Date()).setHours(0) // past midnight
const todayAndFutureEvents = data.events.filter(event => (new Date(event.date)) >= today);
console.log(todayAndFutureEvents);
Еще одна проблема может возникнуть, если ваши события происходят в нескольких часовых поясах, но это, вероятно, выходит за рамки этого вопроса ...
Это решение проверяет EmployeeFileHandler и показывает ошибку, если, например, каталог недоступен для записи. Запустите с javac EmployeeFileHandler.java; java -ea EmployeeFileHandler
, чтобы сбой при подтверждении. Убедитесь, что класс Person также сериализуем.
import java.util.*;
import java.io.*;
public class EmployeeFileHandler implements Serializable {
public static void main(String[] args) {
ArrayList<Employees> employees = new ArrayList<Employees>();
for (int i = 0; i < 1000; i++) {
employees.add(new Employees("Name" + i, "Surname" + i, "" + i, 12345678));
}
writeDate(employees);
ArrayList<Employees> employees2 = new ArrayList<Employees>();
readData(employees2);
assert employees.size() == employees2.size();
for (int i = 0; i < 1000; i++) {
Employees e = employees2.get(i);
assert e.Name.equals("Name" + i);
assert e.Surname.equals("Surname" + i);
assert e.ID.equals("" + i);
assert e.MobNo == 12345678;
}
}
public static void readData(ArrayList<Employees> listIn) {
boolean endOfFile = false;
Employees temp;
try {
FileInputStream employeesFile = new FileInputStream("employee.obf");
ObjectInputStream employeesStream = new ObjectInputStream(employeesFile);
temp = (Employees) employeesStream.readObject();
while (endOfFile != true) {
try {
listIn.add(temp);
temp = (Employees) employeesStream.readObject();
} catch (EOFException e) {
endOfFile = true;
}
}
employeesStream.close();
}
catch (FileNotFoundException e) {
System.out.println("Employee file was not found");
} catch (IOException e) {
System.out.println("Employee file could not be read");
} catch (ClassNotFoundException e) {
System.out.println("Employee class was not found");
}
}
public static void writeDate(ArrayList<Employees> employee) {
try {
FileOutputStream EmployeesFile = new FileOutputStream("employee.obf");
ObjectOutputStream EmployeesStream = new ObjectOutputStream(EmployeesFile);
for (Employees employees : employee) {
EmployeesStream.writeObject(employees);
}
EmployeesStream.close();
} catch (IOException e) {
// System.out.println("Error occurred while saving");
e.printStackTrace();
}
}
}
Я проверил ваш код, но не смог найти никаких проблем.
почему бы вам не попытаться поймать Throwable и проверить его отладкой?
try { /* code */ }
catch (Throwable t) { t.printStackTrace(); }