Skip to content

Instantly share code, notes, and snippets.

@davidnguyen11
Last active January 14, 2019 14:24
Show Gist options
  • Save davidnguyen11/dcc1be29e9a70a4f39400990a2015e67 to your computer and use it in GitHub Desktop.
Save davidnguyen11/dcc1be29e9a70a4f39400990a2015e67 to your computer and use it in GitHub Desktop.
function getDaysInMonth(month, year) {
return new Date(year, month, 0).getDate();
}
function getIntervals(year) {
const months = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
let min = 0;
let max = 0;
return months.map(month => {
min = max + 1;
max = max + getDaysInMonth(month, year);
return {
month,
min,
max,
};
});
}
export default function getDisplayTime(date1, date2) {
const date1MS = date1.getTime();
const date2MS = date2.getTime();
// Calculate the difference in milliseconds
let differenceMS = date2MS - date1MS;
differenceMS = differenceMS / 1000;
const seconds = Math.floor(differenceMS % 60);
differenceMS = differenceMS / 60;
const minutes = Math.floor(differenceMS % 60);
differenceMS = differenceMS / 60;
const hours = Math.floor(differenceMS % 24);
const days = Math.floor(differenceMS / 24);
let display = undefined;
if (days > 0) {
const date2Year = date2.getFullYear();
const intervals = getIntervals(date2Year);
for (let i = 0; i < intervals.length; i++) {
const { month, min, max } = intervals[i];
if (days === max) {
display = `${month} tháng trước`;
}
if (days >= min && days < max) {
display = `${days} ngày trước`;
}
}
} else {
const times = [
{ value: hours, suffix: 'giờ trước' },
{ value: minutes, suffix: 'phút trước' },
{ value: seconds, suffix: 'giây trước' },
];
for (let i = 0; i < times.length; i++) {
if (times[i].value > 0) {
display = `${times[i].value} ${times[i].suffix}`;
break;
}
}
}
if (!display) {
let date = date1.getDate();
let month = date1.getMonth() + 1;
const year = date1.getFullYear();
date = date < 10 ? `0${date}` : date;
month = month < 10 ? `0${month}` : month;
display = `${date}-${month}-${year}`;
}
return {
display,
seconds,
minutes,
hours,
days,
};
}
import getDisplayTime from '../src/getDisplayTime';
// 14-01-2019 17:02:26
const nowValue = 1547460146038;
test('2 phút trước', () => {
const adTime = new Date(1547460024000);
const now = new Date(nowValue);
const { display, days, hours, minutes, seconds } = getDisplayTime(
adTime,
now,
);
expect(display).toBe('2 phút trước');
expect(days).toBe(0);
expect(hours).toBe(0);
expect(minutes).toBe(2);
expect(seconds).toBe(2);
});
test('9 giờ trước', () => {
const adTime = new Date(1547425290000);
const now = new Date(nowValue);
const { display, days, hours, minutes, seconds } = getDisplayTime(
adTime,
now,
);
expect(display).toBe('9 giờ trước');
expect(days).toBe(0);
expect(hours).toBe(9);
expect(minutes).toBe(40);
expect(seconds).toBe(56);
});
test('18 ngày trước', () => {
const adTime = new Date(1545897844000);
const now = new Date(nowValue);
const { display, days, hours, minutes, seconds } = getDisplayTime(
adTime,
now,
);
expect(display).toBe('18 ngày trước');
expect(days).toBe(18);
expect(hours).toBe(1);
expect(minutes).toBe(58);
expect(seconds).toBe(22);
});
test('01-02-2017', () => {
const adTime = new Date(1485882000000);
const now = new Date(nowValue);
const { display, days, hours, minutes, seconds } = getDisplayTime(
adTime,
now,
);
expect(display).toBe('01-02-2017');
expect(days).toBe(712);
expect(hours).toBe(17);
expect(minutes).toBe(2);
expect(seconds).toBe(26);
});
test('2 tháng trước', () => {
const adTime = new Date(1542301200000);
const now = new Date(nowValue);
const { display, days, hours, minutes, seconds } = getDisplayTime(
adTime,
now,
);
expect(display).toBe('2 tháng trước');
expect(days).toBe(59);
expect(hours).toBe(17);
expect(minutes).toBe(2);
expect(seconds).toBe(26);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment