728x90
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function formatDateVerOne(date) { | |
const now = new Date(); | |
const diff = Math.round((now - date) / 1000); | |
if (diff <= 1) { | |
return 'right now'; | |
} else if (diff <= 60) { | |
return `${diff} sec. ago`; | |
} else if (diff <= 3600) { | |
return `${Math.round(diff / 60)} min. ago`; | |
} else { | |
return new Date(date); | |
} | |
} | |
console.log( formatDateVerOne(new Date(new Date - 1)) ); // "right now" | |
console.log( formatDateVerOne(new Date(new Date - 30 * 1000)) ); // "30 sec. ago" | |
console.log( formatDateVerOne(new Date(new Date - 5 * 60 * 1000)) ); // "5 min. ago" | |
// yesterday's date like 31.12.16 20:00 | |
console.log( formatDateVerOne(new Date(new Date - 86400 * 1000)) ); | |
// Solution 2 | |
function formatDateVerTwo(date) { | |
let diff = new Date() - date; // the difference in milliseconds | |
if (diff < 1000) { // less than 1 second | |
return 'right now'; | |
} | |
let sec = Math.floor(diff / 1000); // convert diff to seconds | |
if (sec < 60) { | |
return sec + ' sec. ago'; | |
} | |
let min = Math.floor(diff / 60000); // convert diff to minutes | |
if (min < 60) { | |
return min + ' min. ago'; | |
} | |
// format the date | |
// add leading zeroes to single-digit day/month/hours/minutes | |
let d = date; | |
d = [ | |
'0' + d.getDate(), | |
'0' + (d.getMonth() + 1), | |
'' + d.getFullYear(), | |
'0' + d.getHours(), | |
'0' + d.getMinutes() | |
].map(component => component.slice(-2)); // take last 2 digits of every component | |
// join the components into date | |
return d.slice(0, 3).join('.') + ' ' + d.slice(3).join(':'); | |
} | |
console.log( formatDateVerTwo(new Date(new Date - 1)) ); // "right now" | |
console.log( formatDateVerTwo(new Date(new Date - 30 * 1000)) ); // "30 sec. ago" | |
console.log( formatDateVerTwo(new Date(new Date - 5 * 60 * 1000)) ); // "5 min. ago" | |
// yesterday's date like 31.12.2016 20:00 | |
console.log( formatDateVerTwo(new Date(new Date - 86400 * 1000)) ); | |
// Solution 3 | |
function formatDateVerThree(date) { | |
let dayOfMonth = date.getDate(); | |
let month = date.getMonth() + 1; | |
let year = date.getFullYear(); | |
let hour = date.getHours(); | |
let minutes = date.getMinutes(); | |
let diffMs = new Date() - date; | |
let diffSec = Math.round(diffMs / 1000); | |
let diffMin = diffSec / 60; | |
let diffHour = diffMin / 60; | |
// formatting | |
year = year.toString().slice(-2); | |
month = month < 10 ? '0' + month : month; | |
dayOfMonth = dayOfMonth < 10 ? '0' + dayOfMonth : dayOfMonth; | |
hour = hour < 10 ? '0' + hour : hour; | |
minutes = minutes < 10 ? '0' + minutes : minutes; | |
if (diffSec < 1) { | |
return 'right now'; | |
} else if (diffMin < 1) { | |
return `${diffSec} sec. ago` | |
} else if (diffHour < 1) { | |
return `${diffMin} min. ago` | |
} else { | |
return `${dayOfMonth}.${month}.${year} ${hour}:${minutes}` | |
} | |
} |