Last active
January 14, 2019 14:24
-
-
Save davidnguyen11/dcc1be29e9a70a4f39400990a2015e67 to your computer and use it in GitHub Desktop.
This file contains hidden or 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 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, | |
| }; | |
| } |
This file contains hidden or 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
| 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