@robertocemeri/date-utils
Version:
A simple and lightweight JavaScript library for date and time operations with timezone support
213 lines (156 loc) • 6.14 kB
Markdown
# @robertocemeri/date-utils
A lightweight JavaScript library for easy date and time operations with timezone support.
## Installation
```bash
npm install @robertocemeri/date-utils
## Usage
### Basic Usage
```javascript
import { currentDate, currentYear, currentTime, currentDateTime } from '@robertocemeri/date-utils';
// Get current date
console.log(currentDate()); // "2024-01-15"
console.log(currentDate('DD/MM/YYYY')); // "15/01/2024"
// Get current year
console.log(currentYear()); // 2024
// Get current time
console.log(currentTime()); // "14:30:25"
console.log(currentTime('HH:mm')); // "14:30"
// Get current date and time
console.log(currentDateTime()); // "2024-01-15 14:30:25"
console.log(currentDateTime('DD/MM/YYYY HH:mm')); // "15/01/2024 14:30"
```
### Advanced Usage with Timezone
```javascript
import { createDateUtils } from '@robertocemeri/date-utils';
// Create instance with timezone
const dateUtils = createDateUtils('America/New_York');
console.log(dateUtils.currentDate()); // "2024-01-15"
console.log(dateUtils.currentTime()); // "09:30:25" (EST)
console.log(dateUtils.currentDateTime()); // "2024-01-15 09:30:25"
// Change timezone
dateUtils.setTimezone('UTC');
console.log(dateUtils.currentDateTime()); // "2024-01-15 14:30:25"
// Date manipulation
console.log(dateUtils.addDays(5).currentDate()); // Date 5 days from now
console.log(dateUtils.subtractDays(2).currentDate()); // Date 2 days ago
```
### Class-based Usage
```javascript
import { DateUtils } from '@robertocemeri/date-utils';
const utils = new DateUtils('Asia/Tokyo');
console.log(utils.currentYear()); // 2024
console.log(utils.currentDate('YYYY/MM/DD')); // "2024/01/16"
console.log(utils.currentTime()); // "23:30:25" (JST)
// Get available timezones
const timezones = DateUtils.getAvailableTimezones();
console.log('Available timezones:', timezones.slice(0, 5));
```
## API Reference
### Convenience Functions
- `currentDate(format = 'YYYY-MM-DD')` - Get current date
- `currentYear()` - Get current year
- `currentTime(format = 'HH:mm:ss')` - Get current time
- `currentDateTime(format = 'YYYY-MM-DD HH:mm:ss')` - Get current date and time
- `timestamp()` - Get current timestamp
### DateUtils Class
- `constructor(timezone = 'local')`
- `setTimezone(timezone)` - Set timezone
- `currentDate(format)` - Get current date
- `currentYear()` - Get current year
- `currentTime(format)` - Get current time
- `currentDateTime(format)` - Get current date and time
- `timestamp()` - Get timestamp
- `addDays(days)` - Add days to current date
- `subtractDays(days)` - Subtract days from current date
- `static getAvailableTimezones()` - Get array of all available IANA timezones
## Format Options
### Date Formats
- `YYYY` - Four-digit year (e.g., 2024)
- `YY` - Two-digit year (e.g., 24)
- `MM` - Two-digit month (01-12)
- `M` - Month without leading zero (1-12)
- `DD` - Two-digit day (01-31)
- `D` - Day without leading zero (1-31)
### Time Formats
- `HH` - Two-digit hour in 24-hour format (00-23)
- `H` - Hour without leading zero (0-23)
- `mm` - Two-digit minutes (00-59)
- `m` - Minutes without leading zero (0-59)
- `ss` - Two-digit seconds (00-59)
- `s` - Seconds without leading zero (0-59)
- `SSS` - Three-digit milliseconds (000-999)
### Timezone Support
The library supports all IANA timezone names. Common examples:
- `'local'` - System local time (default)
- `'utc'` - UTC/GMT time
- `'America/New_York'` - Eastern Time
- `'America/Los_Angeles'` - Pacific Time
- `'Europe/London'` - GMT/British Summer Time
- `'Europe/Paris'` - Central European Time
- `'Asia/Tokyo'` - Japan Standard Time
- `'Asia/Kolkata'` - India Standard Time
Get all available timezones:
```javascript
import { DateUtils } from '@robertocemeri/date-utils';
console.log(DateUtils.getAvailableTimezones());
```
### Examples
Different Date Formats
```javascript
import { currentDate } from '@robertocemeri/date-utils';
console.log(currentDate('YYYY-MM-DD')); // "2024-01-15"
console.log(currentDate('DD/MM/YYYY')); // "15/01/2024"
console.log(currentDate('MM/DD/YY')); // "01/15/24"
console.log(currentDate('D/M/YYYY')); // "15/1/2024"
console.log(currentDate('YYYY年MM月DD日')); // "2024年01月15日"
```
Different Time Formats
```javascript
import { currentTime } from '@robertocemeri/date-utils';
console.log(currentTime('HH:mm:ss')); // "14:30:25"
console.log(currentTime('HH:mm')); // "14:30"
console.log(currentTime('H:m')); // "14:30"
console.log(currentTime('HH:mm:ss.SSS')); // "14:30:25.123"
```
Working with Different Timezones
```javascript
import { createDateUtils } from '@robertocemeri/date-utils';
// Compare different timezones
const ny = createDateUtils('America/New_York');
const london = createDateUtils('Europe/London');
const tokyo = createDateUtils('Asia/Tokyo');
console.log('New York:', ny.currentDateTime());
console.log('London:', london.currentDateTime());
console.log('Tokyo:', tokyo.currentDateTime());
```
Date Manipulation
```javascript
import { createDateUtils } from '@robertocemeri/date-utils';
const utils = createDateUtils();
console.log('Today:', utils.currentDate());
console.log('Tomorrow:', utils.addDays(1).currentDate());
console.log('Last week:', utils.subtractDays(7).currentDate());
console.log('In 3 days:', utils.addDays(3).currentDate('DD/MM/YYYY'));
```
### Error Handling
The library gracefully handles invalid timezones by falling back to local time:
```javascript
import { createDateUtils } from '@robertocemeri/date-utils';
const utils = createDateUtils('Invalid/Timezone');
// Will console.warn: "Invalid timezone: Invalid/Timezone. Using local time."
// And continue with local timezone
```
### Browser Support
This library works in all modern browsers that support:
- ES6 modules
- Intl.DateTimeFormat
- String.padStart()
For older browsers, consider using a polyfill for Intl.DateTimeFormat.
### Node.js Support
Requires Node.js version 12.0.0 or higher.
## License
MIT
## Author
Roberto Cemeri <robertocemeri29@gmail.com>
## Repository
https://github.com/robertocemeri/date-utils