All files / utils dateUtils.js

100% Statements 31/31
100% Branches 16/16
100% Functions 4/4
100% Lines 30/30

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53  13x   7x 4x 4x     7x 129x 129x 129x 129x     7x 7x 7x 7x     21x 1x     20x 20x 20x   20x 1x     19x 1x 1x     18x 2x 2x     16x 2x 2x     14x        
 
const padWithZero = (n) => { return n < 10 ? '0' + n : n; }
 
const timestampToDate = (timestamp) => {
    var date = new Date(timestamp);
    return (date.getFullYear() + "-" + (padWithZero(date.getMonth()+1)) + "-" + padWithZero(date.getDate()));
}
 
const daysSinceTimestamp = (date) => {
    var today = new Date();
    var startingDate = new Date(date);
    var timeDiff = Math.abs(today.getTime() - startingDate.getTime());
    return Math.ceil(timeDiff / (1000 * 3600 * 24));
}
 
const minutesInSeconds = 60;
const hourInSeconds = 60 * minutesInSeconds;
const dayInSeconds = 24 * hourInSeconds;
const weekInSeconds = 7 * dayInSeconds;
 
export function formatTime(timeString) {
    if (!timeString) {
        return "";
    }
 
    const now = new Date();
    const dateFromEpoch = new Date(timeString);
    const secondsPast = Math.floor((now - dateFromEpoch) / 1000);
 
    if (secondsPast < minutesInSeconds * 2) {
        return 'Online now';
    }
 
    if (secondsPast < hourInSeconds) {
        const minutes = Math.floor(secondsPast / 60);
        return `${minutes} minutes ago`;
    }
 
    if (secondsPast < dayInSeconds) {
        const hours = Math.floor(secondsPast / 3600);
        return `${hours} hour${hours > 1 ? 's' : ''} ago`;
    }
    
    if (secondsPast < weekInSeconds) {
        const days = Math.floor(secondsPast / 86400);
        return `${days} day${days > 1 ? 's' : ''} ago`;
    }
 
    return dateFromEpoch.toLocaleDateString();
}
 
export {timestampToDate, padWithZero, daysSinceTimestamp};