import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/vi/functional-basic/# Làm việc với ngày tháng'/>

# Làm việc với ngày tháng

Lớp `Datetime` là một công cụ nâng cao để thao tác, điều hướng và định dạng ngày tháng theo địa phương. Nó mở rộng đối tượng `Date` tiêu chuẩn bằng cách thêm các phương thức di chuyển thông minh (theo ngày, tuần, tháng) và tích hợp liền mạch với hệ thống quốc tế hóa.

```javascript
import { Datetime } from '@dxtmisha/functional-basic'

// 1. Khởi tạo (từ chuỗi, số hoặc đối tượng Date)
const date = new Datetime('2024-03-21')

// 2. Định dạng theo địa phương
date.locale()           // '21/03/2024' (tùy thuộc vào Geo)
date.localeMonth('long') // 'Tháng 3'

// 3. Lấy thông tin múi giờ
date.getTimeZone() // '+07:00'
```

## Thao tác và Dịch chuyển

Các phương thức `moveBy...` cho phép bạn thay đổi ngày tháng so với giá trị hiện tại. Tất cả các phương thức đều hỗ trợ gọi chuỗi (chaining).

```javascript
const date = new Datetime()

// Di chuyển 2 năm tới và 1 tháng lui
date.moveByYear(2).moveByMonth(-1)

// Thiết lập các giá trị cụ thể
date.setDay(15).setHour(12)
```

## Điều hướng

Các phương thức chuyên dụng để điều hướng nhanh đến các biên của khoảng thời gian (đầu tháng, tuần tiếp theo, v.v.).

```javascript
const date = new Datetime()

// Chuyển đến ngày đầu tiên của tháng hiện tại
date.moveDayFirst()

// Chuyển đến ngày đầu tiên của tháng tiếp theo
date.moveMonthNext()

// Chuyển đến ngày đầu tiên của tuần (tính đến locale)
date.moveWeekdayFirst()
```

## Sao chép (Tính bất biến)

Nếu bạn cần lấy một ngày đã thay đổi mà không làm thay đổi đối tượng gốc, hãy sử dụng các phương thức `clone...`.

```javascript
const start = new Datetime()
const nextMonth = start.cloneMonthNext() // Đối tượng Datetime mới

console.log(start.locale())     // Hôm nay
console.log(nextMonth.locale()) // +1 tháng
```
