{"_id":"datetime-toolkit","_rev":"8-6d93f30ccf18ae5ddd7ce89b26f5c789","name":"datetime-toolkit","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.0":{"name":"datetime-toolkit","version":"1.0.0","keywords":["datetime","date","time","utils","utilities","react","format"],"license":"ISC","_id":"datetime-toolkit@1.0.0","maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"bin":{"datetime-toolkit":"cli.js"},"dist":{"shasum":"15508923df3e1567d3255144db341d0c4bc97686","tarball":"https://registry.npmjs.org/datetime-toolkit/-/datetime-toolkit-1.0.0.tgz","fileCount":17,"integrity":"sha512-v7Tb8YghxEyzr9EbGLFJI1D5zC+F48kOJfOZkJWurFws9SrkAtmarnsYdspgnaReW6sYKiT3zH48dhm0e1MOrg==","signatures":[{"sig":"MEYCIQDfWS9NHg1R/+9qyzyIC6gPHOH5L35shacrrYB/qFHB8QIhAIdzjWyJqIWnOF35qW4v2FBu1h1us+qMNa41YdgJ3XNx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43465},"main":"index.js","engines":{"node":">=16"},"exports":{".":"./index.js","./react":"./components/index.js"},"scripts":{"demo":"node demo.js","publish:dry":"npm publish --dry-run"},"_npmUser":{"name":"idanefraim","email":"idanefraim13@gmail.com"},"_npmVersion":"10.2.4","description":"Lightweight datetime utilities for Node.js and React","directories":{},"_nodeVersion":"21.4.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"react":">=17","react-dom":">=17"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/datetime-toolkit_1.0.0_1780485749025_0.4844843331437081","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"datetime-toolkit","version":"1.0.1","keywords":["datetime","date","time","utils","utilities","react","format"],"license":"ISC","_id":"datetime-toolkit@1.0.1","maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"bin":{"datetime-toolkit":"cli.js"},"dist":{"shasum":"b2e1ff82c4e0d8e0bf6a16e36a2424e3e5ce6489","tarball":"https://registry.npmjs.org/datetime-toolkit/-/datetime-toolkit-1.0.1.tgz","fileCount":17,"integrity":"sha512-Fv3fZFbPYhmmo4m1foXiK3S/vlLPIbvYRaYjbG5vSRC1ZbfJ3JZRC0TouWuvO0tqF/auIE6JHLoxGsuMrxRBTQ==","signatures":[{"sig":"MEQCIGsq+46BDA+H4CBa0N3qNHUP5M1mcZkvD9d/xeng6zH/AiANQzxnuoIz3CYTKMW7PRUM7xv/dYJELM6x6H1AgSi4Lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45814},"main":"datetime.js","engines":{"node":">=16"},"exports":{".":"./datetime.js","./react":"./components/index.js"},"scripts":{"demo":"node demo.js","publish:dry":"npm publish --dry-run"},"_npmUser":{"name":"idanefraim","email":"idanefraim13@gmail.com"},"_npmVersion":"10.2.4","description":"Lightweight datetime utilities for Node.js and React","directories":{},"_nodeVersion":"21.4.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"react":">=17","react-dom":">=17"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/datetime-toolkit_1.0.1_1780488266182_0.7090037288109423","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"datetime-toolkit","version":"1.0.2","keywords":["datetime","date","time","utils","utilities","react","format"],"license":"ISC","_id":"datetime-toolkit@1.0.2","maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"bin":{"datetime-toolkit":"cli.js"},"dist":{"shasum":"4d2452a648648da4c3aaa7abc4b831914ea02483","tarball":"https://registry.npmjs.org/datetime-toolkit/-/datetime-toolkit-1.0.2.tgz","fileCount":17,"integrity":"sha512-BQ1eEeTlQr4wuJLyfy6iKwq1rd3+nMGmVH6atSbBMkZamU7u/8VHIL8bL8bH+NoAb0yxg7YL84R0wslXy93fYw==","signatures":[{"sig":"MEQCIExsjZ882RnIE/JvE5BeRzlvd/QD1GGGmHomt2HCXUHeAiAWnrMLtXdg8NEyNBmOTZ1UlQJ2eQXV6lBhcLZniVyYBQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45814},"main":"datetime.js","engines":{"node":">=16"},"exports":{".":"./datetime.js","./react":"./components/index.js"},"scripts":{"demo":"node demo.js","publish:dry":"npm publish --dry-run"},"_npmUser":{"name":"idanefraim","email":"idanefraim13@gmail.com"},"_npmVersion":"10.2.4","description":"Lightweight datetime utilities for Node.js and React","directories":{},"_nodeVersion":"21.4.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"react":">=17","react-dom":">=17"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/datetime-toolkit_1.0.2_1780488457992_0.36750811198651157","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"datetime-toolkit","version":"1.0.3","keywords":["datetime","date","time","utils","utilities","react","format"],"license":"ISC","_id":"datetime-toolkit@1.0.3","maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"bin":{"datetime-toolkit":"cli.js"},"dist":{"shasum":"305b0ea2d383ddd1ff64aa30951db09cfd800c77","tarball":"https://registry.npmjs.org/datetime-toolkit/-/datetime-toolkit-1.0.3.tgz","fileCount":17,"integrity":"sha512-pEXUOtCAMTt6b4BC1VHTH4CnuuvLDJZWJSqMLe8oBfvDoZGxhEdVY2mfg4jaU4IgnmJzY1m/A6ayYce6OLb9xQ==","signatures":[{"sig":"MEUCIQCFiI6U8PMalNDT1d1CYEqLpiRO22Y1uQKRbSoqjYiXzwIgOl5V+1Kxu+Qdd1GfsdO+Go7y16KC99u48Oh4wuz6wAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45915},"main":"datetime.js","engines":{"node":">=16"},"exports":{".":"./datetime.js","./react":"./components/index.js"},"scripts":{"demo":"node demo.js","publish:dry":"npm publish --dry-run"},"_npmUser":{"name":"idanefraim","email":"idanefraim13@gmail.com"},"_npmVersion":"10.2.4","description":"Lightweight datetime utilities for Node.js and React","directories":{},"_nodeVersion":"21.4.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"react":">=17","react-dom":">=17"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/datetime-toolkit_1.0.3_1780488651568_0.7970408309659323","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"datetime-toolkit","version":"1.0.4","keywords":["datetime","date","time","utils","utilities","react","format"],"license":"ISC","_id":"datetime-toolkit@1.0.4","maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"bin":{"datetime-toolkit":"cli.js"},"dist":{"shasum":"d403f1df606f1d29fed505abe2d55f40121113b3","tarball":"https://registry.npmjs.org/datetime-toolkit/-/datetime-toolkit-1.0.4.tgz","fileCount":17,"integrity":"sha512-oGbMMUUwBiIiaj9NCKejtUmV4LO2XyiAkXdBrwLTcpX3Huy8I7QEE7CEhifTWZP1fgZZJ6HZyLZRTg5DkAb6og==","signatures":[{"sig":"MEQCIGIhuc3S48OxkV74ECOoDZaRB54XIlDe9giZf1okR967AiBG5cVzYwcYjfaIVLuygwoycNNKv4Gsnnv1w9m7qlHPOw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45169},"main":"datetime.js","engines":{"node":">=16"},"exports":{".":"./datetime.js","./react":"./components/index.js"},"scripts":{"demo":"node demo.js","publish:dry":"npm publish --dry-run"},"_npmUser":{"name":"idanefraim","email":"idanefraim13@gmail.com"},"_npmVersion":"10.2.4","description":"Lightweight datetime utilities for Node.js and React","directories":{},"_nodeVersion":"21.4.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"react":">=17","react-dom":">=17"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/datetime-toolkit_1.0.4_1780488982065_0.08852128972975626","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"datetime-toolkit","version":"1.0.5","keywords":["datetime","date","time","utils","utilities","react","format"],"license":"ISC","_id":"datetime-toolkit@1.0.5","maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"bin":{"datetime-toolkit":"cli.js"},"dist":{"shasum":"93c9bdb504121ba6fe1415e3d3cf54eeea517e63","tarball":"https://registry.npmjs.org/datetime-toolkit/-/datetime-toolkit-1.0.5.tgz","fileCount":18,"integrity":"sha512-iYyJZ5CQs4OVD/M+1gaDQzU5o2dJc0x+YoA6zLNO105v/nf+kge0iktoafMhTZSOXJ/s1FblN3JMnfFHxYq05w==","signatures":[{"sig":"MEUCIDMRC/DwLwPVmB84nLLbDrrbvpQx+k3bw97UwQ7i9FWyAiEA6Wi4l+XY0nApIZY+J+Pabj3iizNXQ/LVN4YfYotWJjk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47944},"main":"datetime.js","engines":{"node":">=16"},"exports":{".":"./datetime.js","./react":"./components/index.js"},"scripts":{"demo":"node demo.js","publish:dry":"npm publish --dry-run"},"_npmUser":{"name":"idanefraim","email":"idanefraim13@gmail.com"},"_npmVersion":"10.2.4","description":"Lightweight datetime utilities for Node.js and React","directories":{},"_nodeVersion":"21.4.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"react":">=17","react-dom":">=17"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/datetime-toolkit_1.0.5_1780489505762_0.7976553429255961","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"datetime-toolkit","version":"1.0.6","keywords":["datetime","date","time","utils","utilities","react","format"],"license":"ISC","_id":"datetime-toolkit@1.0.6","maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"bin":{"datetime-toolkit":"cli.js"},"dist":{"shasum":"a71c7eb2183a2eff00d5abae438727714e1f2cc3","tarball":"https://registry.npmjs.org/datetime-toolkit/-/datetime-toolkit-1.0.6.tgz","fileCount":18,"integrity":"sha512-btOqWikPyjiNteuwlzsBHV7ucYr8gkBuGOgyYFGb09m7LmTSq2NJIetjjxNUpKl+M7yVUD87rTB+MjId5nFZQw==","signatures":[{"sig":"MEQCIAfDY/D8K0wSH9PPGL6/+CFbdx1seOe4PAV1jLxFkzt6AiARWflZ5F4eWG2Rgjm4I+GFjQbTr+ST9ekPpJvEJFoElg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47966},"main":"datetime.js","engines":{"node":">=16"},"exports":{".":"./datetime.js","./react":"./components/index.js"},"scripts":{"demo":"node demo.js","publish:dry":"npm publish --dry-run"},"_npmUser":{"name":"idanefraim","email":"idanefraim13@gmail.com"},"_npmVersion":"10.2.4","description":"Lightweight datetime utilities for Node.js and React","directories":{},"_nodeVersion":"21.4.0","dependencies":{},"_hasShrinkwrap":false,"peerDependencies":{"react":">=17","react-dom":">=17"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/datetime-toolkit_1.0.6_1780490076810_0.4469917757688944","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"datetime-toolkit","version":"1.0.7","description":"Lightweight datetime utilities for Node.js — zero dependencies","main":"datetime.js","exports":{".":"./datetime.js"},"keywords":["datetime","date","time","utils","utilities","format","relative","countdown","business-days"],"license":"ISC","engines":{"node":">=16"},"dependencies":{},"_id":"datetime-toolkit@1.0.7","gitHead":"f81da1d5e5002b539b84786e71f620d8cbf230aa","_nodeVersion":"21.4.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-BTErqeexKXLDgJo4Cv8GzoCO0vVlxV9MoEr5Tiy/5OR9+Mc1FFUxSj8yutHStSymHwvh37QuH0qsh1dpj6JvrA==","shasum":"14ae4eba299b3e97bb8c69af6fc6d6f7ef6659c1","tarball":"https://registry.npmjs.org/datetime-toolkit/-/datetime-toolkit-1.0.7.tgz","fileCount":4,"unpackedSize":22350,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIB2h9yTiaSyXapkeYoXfnaudrCee6ZXEEduFqvtWXiJ5AiBSJ1x84UZTb3jd4Xt1E8xQfgEg+4cXoNHUuYL2jllBNA=="}]},"_npmUser":{"name":"idanefraim","email":"idanefraim13@gmail.com"},"directories":{},"maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/datetime-toolkit_1.0.7_1780494618931_0.9849485468394235"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-03T11:22:28.904Z","modified":"2026-06-03T13:50:19.247Z","1.0.0":"2026-06-03T11:22:29.155Z","1.0.1":"2026-06-03T12:04:26.368Z","1.0.2":"2026-06-03T12:07:38.121Z","1.0.3":"2026-06-03T12:10:51.701Z","1.0.4":"2026-06-03T12:16:22.200Z","1.0.5":"2026-06-03T12:25:05.908Z","1.0.6":"2026-06-03T12:34:36.940Z","1.0.7":"2026-06-03T13:50:19.126Z"},"license":"ISC","keywords":["datetime","date","time","utils","utilities","format","relative","countdown","business-days"],"description":"Lightweight datetime utilities for Node.js — zero dependencies","maintainers":[{"name":"idanefraim","email":"idanefraim13@gmail.com"}],"readme":"# datetime-toolkit\n\n> Lightweight datetime utilities for Node.js — zero dependencies.\n\n[![npm version](https://img.shields.io/npm/v/datetime-toolkit)](https://www.npmjs.com/package/datetime-toolkit)\n[![license](https://img.shields.io/npm/l/datetime-toolkit)](https://www.npmjs.com/package/datetime-toolkit)\n[![node](https://img.shields.io/node/v/datetime-toolkit)](https://www.npmjs.com/package/datetime-toolkit)\n\n---\n\n## Installation\n\n```bash\nnpm install datetime-toolkit\n```\n\n---\n\n## Quick start\n\n```js\nconst {\n  now, format, relative, countdown,\n  addDays, diffDays, businessDays,\n  startOfWeek, endOfMonth, isWeekend,\n  age, weekNumber, configure,\n} = require('datetime-toolkit');\n\nconfigure({ locale: 'en-GB', timezone: 'Europe/London' });\n\nconsole.log(now());                          // \"2025-06-03T14:00:00.000Z\"\nconsole.log(format(new Date()));             // \"3 Jun 2025, 14:00\"\nconsole.log(relative('2025-01-01'));         // \"5 months ago\"\nconsole.log(countdown('2026-01-01'));        // { days: 212, hours: 10, ... }\nconsole.log(businessDays('2025-06-01', '2025-06-30')); // 21\n```\n\n---\n\n## Configuration\n\n### `configure(opts)`\n\nSet defaults used by `format()`, `relative()`, and other locale-aware functions.\n\n```js\nconfigure({\n  locale:   'fr-FR',           // any BCP 47 locale tag\n  timezone: 'Europe/Paris',    // any IANA timezone name\n});\n```\n\n---\n\n## API\n\n### Core\n\n| Function | Returns | Description |\n|---|---|---|\n| `now()` | `string` | Current datetime as ISO 8601 |\n| `timestamp()` | `number` | Current Unix time in ms |\n| `parse(str)` | `Date \\| null` | Safe parse — `null` on invalid input |\n\n---\n\n### Formatting\n\n#### `format(date, options?, locale?)`\nFormats a date using [`Intl.DateTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat). Respects `configure()` defaults.\n\n```js\nformat(new Date())\n// \"Jun 3, 2025, 2:00 PM\"\n\nformat(new Date(), { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })\n// \"Tuesday, June 3, 2025\"\n\nformat(new Date(), { dateStyle: 'full' }, 'ja-JP')\n// \"2025年6月3日火曜日\"\n```\n\n#### `relative(date, locale?)`\nHuman-readable relative time using `Intl.RelativeTimeFormat`.\n\n```js\nrelative('2025-01-01')          // \"5 months ago\"\nrelative('2027-06-01')          // \"in 2 years\"\nrelative(new Date())            // \"now\"\nrelative('2025-01-01', 'de-DE') // \"vor 5 Monaten\"\n```\n\n#### `formatDuration(ms)`\nFormat a duration in milliseconds as a readable string.\n\n```js\nformatDuration(3_661_000)  // \"1h 1m 1s\"\nformatDuration(90_000)     // \"1m 30s\"\nformatDuration(500)        // \"0s\"\n```\n\n#### `elapsed(from)`\nMilliseconds since a given date.\n\n```js\nelapsed('2025-01-01') // 13219320000\n```\n\n#### `countdown(date)`\nCountdown object to a future date. All values are `0` if the date is past.\n\n```js\ncountdown('2026-01-01')\n// { total: 18345600000, days: 212, hours: 10, minutes: 40, seconds: 0 }\n```\n\n---\n\n### Arithmetic\n\n```js\naddSeconds(date, n)   // ± seconds\naddMinutes(date, n)   // ± minutes\naddHours(date, n)     // ± hours\naddDays(date, n)      // ± days\naddWeeks(date, n)     // ± weeks\naddMonths(date, n)    // ± months (clamps to end of month)\naddYears(date, n)     // ± years\n```\n\n```js\naddDays(new Date(), 7)     // one week from now\naddMonths(new Date(), -1)  // one month ago\naddYears('2020-02-29', 1)  // 2021-02-28  ← clamps correctly\n```\n\n---\n\n### Boundaries\n\n```js\nstartOfDay(date)             // 00:00:00.000\nendOfDay(date)               // 23:59:59.999\nstartOfWeek(date, startDay?) // defaults to Sunday (0); pass 1 for Monday\nendOfWeek(date, startDay?)\nstartOfMonth(date)           // 1st of the month, midnight\nendOfMonth(date)             // last day of the month, 23:59:59.999\nstartOfYear(date)            // Jan 1, midnight\nendOfYear(date)              // Dec 31, 23:59:59.999\n```\n\n---\n\n### Comparison\n\n```js\nisBefore(a, b)              // a < b\nisAfter(a, b)               // a > b\nisBetween(date, start, end) // start ≤ date ≤ end\nisSameDay(a, b)             // same calendar day\nisWeekend(date)             // Saturday or Sunday\nisWeekday(date)             // Monday – Friday\n```\n\n---\n\n### Difference\n\n#### `diffDays(a, b?)`\nWhole-day difference between two dates (`a − b`). Defaults `b` to today.\n\n```js\ndiffDays('2025-12-31')          // days until New Year's Eve\ndiffDays('2025-06-10', '2025-06-01') // 9\n```\n\n#### `businessDays(from, to)`\nCount Monday–Friday days between two dates (inclusive).\n\n```js\nbusinessDays('2025-06-01', '2025-06-30') // 21\n```\n\n---\n\n### Calendar helpers\n\n| Function | Description |\n|---|---|\n| `daysInMonth(date)` | Number of days in the month |\n| `isLeapYear(yearOrDate)` | Leap year check |\n| `weekNumber(date?)` | ISO week number (1–53) |\n| `age(birthdate)` | Age in whole years |\n| `nextWeekday(date, weekday)` | Next occurrence of a weekday (0=Sun … 6=Sat) |\n\n```js\ndaysInMonth('2024-02-01')      // 29\nisLeapYear(2024)               // true\nweekNumber()                   // 23\nage('1990-06-03')              // 35\nnextWeekday(new Date(), 1)     // next Monday\n```\n\n---\n\n## License\n\nISC\n","readmeFilename":"README.md"}