То что у Вас в полях created и viewed вполне можно отдать в конструктор Date, а даты уже можно сравнивать между собой
console.log(new Date("2020-05-22 16:24:16")); // работает
Дальше, последний created, тут нужно уточнение:
Если массив messages всегда упорядочен по полю created, как и в примере, то можно просто брать последний элемент массива и работать с ним:
const lastMessage = messages[messages.length - 1];
console.log(lastMessage);
Если такой гарантии нет, то нужно искать максимум:
const lastMessage = messages.reduce(([maxDate, maxMessage], currentMassage) => {
const currentDate = new Date(currentMassage.created);
if(currentDate > maxDate) {
return [currentDate, currentMassage];
}
return [maxDate, maxMessage];
}, [-Infinity, null])[1];
console.log(lastMessage);
Ну а если с этим разберетесь, то с последним пунктом у Вас уже не должно быть проблем, тут все аналогично