UNPKG

kk-date

Version:

kk-date is a fastest JavaScript library that parses, validations, manipulates, and displays dates and times. If you use Moment.js or Day.js already you can easily use kk-date.

79 lines (73 loc) 3.9 kB
const { describe, test, expect } = require('@jest/globals'); const kk_date = require('../index'); describe('kk_date startOf / endOf', () => { const testDateTime = '2024-08-19 14:35:45'; const testLeapDateTime = '2024-02-15 10:10:10'; // Leap year const testEndOfMonthDateTime = '2024-03-31 12:00:00'; // --- startOf Tests --- test('startOf years', () => { expect(new kk_date(testDateTime).startOf('years').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-01-01 00:00:00'); }); test('startOf months', () => { expect(new kk_date(testDateTime).startOf('months').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-01 00:00:00'); }); test('startOf weeks (assuming Sunday start)', () => { // 2024-08-19 is a Monday (day 1) expect(new kk_date(testDateTime).startOf('weeks').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-18 00:00:00'); // Test with a Sunday expect(new kk_date('2024-08-18 10:00:00').startOf('weeks').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-18 00:00:00'); }); test('startOf days', () => { expect(new kk_date(testDateTime).startOf('days').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-19 00:00:00'); }); test('startOf hour', () => { expect(new kk_date(testDateTime).startOf('hours').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-19 14:00:00'); }); test('startOf minutes', () => { expect(new kk_date(testDateTime).startOf('minutes').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-19 14:35:00'); }); test('startOf seconds', () => { expect(new kk_date(testDateTime).startOf('seconds').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-19 14:35:45'); }); // --- endOf Tests --- test('endOf years', () => { expect(new kk_date(testDateTime).endOf('years').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-12-31 23:59:59'); }); test('endOf months', () => { expect(new kk_date(testDateTime).endOf('months').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-31 23:59:59'); // Test leap year February expect(new kk_date(testLeapDateTime).endOf('months').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-02-29 23:59:59'); // Test non-leap year February expect(new kk_date('2025-02-10').endOf('months').format('YYYY-MM-DD HH:mm:ss')).toBe('2025-02-28 23:59:59'); // Test 30-day month expect(new kk_date('2024-04-15').endOf('months').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-04-30 23:59:59'); // Test 31-day month expect(new kk_date(testEndOfMonthDateTime).endOf('months').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-03-31 23:59:59'); }); test('endOf weeks (assuming Saturday end)', () => { // 2024-08-19 is a Monday (day 1) expect(new kk_date(testDateTime).endOf('weeks').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-24 23:59:59'); // Test with a Saturday expect(new kk_date('2024-08-24 10:00:00').endOf('weeks').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-24 23:59:59'); }); test('endOf days', () => { expect(new kk_date(testDateTime).endOf('days').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-19 23:59:59'); }); test('endOf hours', () => { expect(new kk_date(testDateTime).endOf('hours').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-19 14:59:59'); }); test('endOf minutes', () => { expect(new kk_date(testDateTime).endOf('minutes').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-19 14:35:59'); }); test('endOf seconds', () => { expect(new kk_date(testDateTime).endOf('seconds').format('HH:mm:ss.SSS')).toBe('14:35:45.999'); }); test('startOf/endOf chaining', () => { expect(new kk_date(testDateTime).startOf('days').add(12, 'hours').format('HH:mm')).toBe('12:00'); expect(new kk_date(testDateTime).endOf('months').startOf('days').format('YYYY-MM-DD HH:mm:ss')).toBe('2024-08-31 00:00:00'); }); test('startOf/endOf invalid unit', () => { expect(() => new kk_date(testDateTime).startOf('year')).toThrow('Invalid unit for startOf: year'); expect(() => new kk_date(testDateTime).endOf('day')).toThrow('Invalid unit for endOf: day'); }); });