UNPKG

@app-masters/js-lib

Version:
249 lines (218 loc) 7.81 kB
import moment from 'moment'; moment.updateLocale('pt-br', require('moment/locale/pt-br')); class DateTime { /** * DONT USE IT!!! NEED MORE TESTS!!! * Show a pretty date format * @param date * @param unique * @returns {*} */ static humanize (date, unique) { if (!date) return null; let now = new Date(); let timeDiff = now - new Date(date); timeDiff /= 1000; let days = Math.floor(timeDiff / 86400); let hours = Math.floor((timeDiff - (days * 86400)) / 3600); let minutes = Math.floor((timeDiff - (days * 86400) - (hours * 3600)) / 60); let secs = Math.floor((timeDiff - (days * 86400) - (hours * 3600) - (minutes * 60))); let result = ''; if (unique === false) { result = []; if (days === 1) result.push("1 dia"); if (days > 1) result.push(days + (days > 1 ? " dias" : " dia")); if (hours > 0) result.push(hours + (hours > 1 ? " horas" : " hora")); if (minutes > 0) result.push(minutes + (minutes > 1 ? " minutos" : " minuto")); if (secs > 0) result.push(secs + (secs > 1 ? " segundos" : " segundo")); result = result.join(", "); } else { if (days === 1) result = "1 dia"; else if (days > 1) result = days + " dias"; else if (hours > 0) result += hours + (hours > 1 ? " horas" : " hora"); else if (minutes > 0) result += minutes + (minutes > 1 ? " minutos" : " minuto"); else if (secs > 0) result += secs + (secs > 1 ? " segundos" : " segundo"); else result = "agora"; } // let x = "(" + days + " Days " + hours + " Hours " + minutes + " Minutes and " + secs + " Secondes " + ")"; return result; } static relative (date, showHour, dateFormat) { if (!date) return null; const now = moment(); let today = now.format('DD-MM-YYYY'); let tomorrow = moment().add(1,'days').format('DD-MM-YYYY'); let yesterday = moment().subtract(1, 'days').format('DD-MM-YYYY'); date = moment(date, dateFormat); const dateS = date.format('DD-MM-YYYY'); today = today === dateS; tomorrow = tomorrow === dateS; yesterday = yesterday === dateS; const sameMonth = now.format('MM/YYYY') === date.format('MM/YYYY'); const sameYear = now.format('YYYY') === date.format('YYYY'); const day = date.format('DD/MM'); const hour = showHour ? ' às ' + date.format('HH:mm') : '' if (today) { return 'Hoje' + hour; } else if (tomorrow) { return 'Amanhã' + hour; } else if (yesterday) { return 'Ontem' + hour; } else if (sameMonth) { return "Dia " + day.split('/')[0] + hour; } else if (sameYear) { return day + hour; } else if (!sameYear) { return date.format('DD/MM/YYYY') + hour; } else { console.log("days", days); console.log("hours", hours); console.log("minutes", minutes); console.log("secs", secs); } } static _sameDay (d1, d2) { return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate(); } /** * Return a formated hour "hh:mm:ss" from a seconds number * @param seconds */ static secondsToHour (seconds, round) { if (seconds === undefined || seconds === null) return null; // console.log("seconds", seconds); let duration = moment.duration(seconds, 'seconds'); round = false; if (round) return Math.round(duration.asHours()) + " hs"; else return Math.floor(duration.asHours()) + ":" + ("0" + duration.minutes()).slice(-2); } /** * Return a humanize hour like "1 dia" from a seconds number * @param seconds */ static secondsToHumanize (seconds) { if (seconds === undefined || seconds === null) return null; // console.log("seconds", seconds); let duration = moment.duration(seconds, 'seconds'); // console.log("duration", duration); let formatted = duration.humanize(); return formatted; } static formatHour (value) { return moment(value).format('hh:mm'); // return hora; } static _addZero (i) { if (i < 10) { i = "0" + i; } return i; } static formatDateTime (date, space) { if (!date) return null; if (!space) space = ' '; let result = ''; result = DateTime.TSToDate(date) + space + DateTime.formatHour(date); // console.log(result); return result; } // Função que recebe data DD-MM-YYYY e devolve YYYY-MM-DD static DateToISO (dateStr) { if (dateStr !== '') { return dateStr.split('/').reverse().join('/'); } else { return ''; } } // Função que recebe data DD-MM-YYYY e devolve UNIX TimeStamp static DateToTS (dateStr) { if (dateStr !== '') { const ISODate = DateTime.DateToISO(dateStr); const TSDate = (new Date(ISODate)); return TSDate; } else { return ''; } } // Função que recebe UNIX TimeStamp e devolve data DD-MM-YYYY static TSToDate (TSValue) { if (TSValue !== '') { const fullDate = (new Date(TSValue)); return ( fullDate.getUTCDate() + '/' + (fullDate.getUTCMonth() + 1) + '/' + fullDate.getUTCFullYear() ); } else { return ''; } } // Função que recebe frequencia e converte para intervalo de TimeStamp static freqToTS (freqValue, daily) { if (daily) { return freqValue * 3600; // 60 minutos * 60 segundos } else { return freqValue * 86400; // 24 horas * 60 minutos * 60 segundos } } // Função que recebe data HH:MM e devolve UNIX TimeStamp static TimeToTS (TimeStr) { if (TimeStr !== '') { const timeVec = TimeStr.split(':'); return (timeVec[0] * 3600 + timeVec[1] * 60); } else { return ''; } } static TSToTime (TSValue) { if (TSValue !== '') { let minutes = Math.floor((TSValue % 3600) / 60); let hours = Math.floor(TSValue / 3600); hours = hours < 10 ? '0' + hours : hours; minutes = minutes < 10 ? '0' + minutes : minutes; return (hours + ':' + minutes); } else { return ''; } } static RelativeDate (TimeStr) { const dueDate = moment(TimeStr, 'DD-MM-YYYY'); if (dueDate.diff(moment(), 'days') <= 6) { const date = dueDate.calendar().split(' às')[0]; return (date + ', ' + moment(TimeStr, 'DD-MM-YYYY').format('LL')); } else { return (moment(TimeStr, 'DD-MM-YYYY').format('LL')); } } static TSToFreqString (TimeStr) { if (TimeStr <= 86400) { return 'Diário'; } else if (TimeStr === 604800) { return 'Semanal'; } else if (TimeStr === 1296000) { return 'Quinzenal'; } else if (TimeStr === 2592000) { return 'Mensal'; } else { return null; } } } export default DateTime;