Функция firstDayOfMonth используется для получения
первого дня месяца на основе переданной даты. Возвращаемое значение —
новый объект Date, установленный на начало соответствующего
месяца.
firstDayOfMonth(date)
| Аргумент | Тип | Описание |
|---|---|---|
date |
Date \| number |
Исходная дата |
Возвращает объект Date, представляющий первый день
месяца.
const firstDayOfMonth = require('date-fns/firstDayOfMonth')
import firstDayOfMonth fr om 'date-fns/firstDayOfMonth'
import { firstDayOfMonth } from 'date-fns'
import { firstDayOfMonth } from 'date-fns'
const date = new Date(2026, 4, 18)
const result = firstDayOfMonth(date)
console.log(result)
Результат:
2026-05-01T00:00:00.000Z
Если передать любую дату месяца, функция:
1.Пример:
const date = new Date(2025, 9, 27, 15, 45)
const result = firstDayOfMonth(date)
console.log(result)
Результат:
Wed Oct 01 2025 15:45:00
Время 15:45:00 сохраняется.
import { firstDayOfMonth } from 'date-fns'
const now = new Date()
const start = firstDayOfMonth(now)
console.log(start)
Очень часто firstDayOfMonth применяется вместе с
format.
import { firstDayOfMonth, format } from 'date-fns'
const date = new Date()
const result = firstDayOfMonth(date)
console.log(format(result, 'dd.MM.yyyy'))
Результат:
01.05.2026
import { firstDayOfMonth } from 'date-fns'
function getCalendarStart(date) {
return firstDayOfMonth(date)
}
console.log(getCalendarStart(new Date()))
Подобная логика используется в:
date-fns работает с локальным временем JavaScript.
const date = new Date('2026-07-19T12:00:00')
console.log(firstDayOfMonth(date))
Результат зависит от локальной временной зоны среды выполнения.
import {
firstDayOfMonth,
subMonths
} from 'date-fns'
const date = new Date()
const previousMonth = subMonths(date, 1)
const result = firstDayOfMonth(previousMonth)
console.log(result)
import {
firstDayOfMonth,
addMonths
} from 'date-fns'
const date = new Date()
const nextMonth = addMonths(date, 1)
const result = firstDayOfMonth(nextMonth)
console.log(result)
import {
firstDayOfMonth,
format
} from 'date-fns'
const reportDate = new Date()
const start = firstDayOfMonth(reportDate)
console.log(
`Начало отчётного периода: ${format(start, 'yyyy-MM-dd')}`
)
firstDayOfMonth часто используется вместе с
lastDayOfMonth.
import {
firstDayOfMonth,
lastDayOfMonth
} from 'date-fns'
const date = new Date()
const start = firstDayOfMonth(date)
const end = lastDayOfMonth(date)
console.log(start)
console.log(end)
import {
firstDayOfMonth,
isEqual
} from 'date-fns'
const date = new Date()
const start = firstDayOfMonth(date)
console.log(isEqual(date, start))
import {
firstDayOfMonth,
format
} from 'date-fns'
const date = new Date()
const start = format(
firstDayOfMonth(date),
'yyyy-MM-dd'
)
const query = `
SEL ECT *
FROM orders
WH ERE created_at >= '${start}'
`
console.log(query)
lastDayOfMonthФункция lastDayOfMonth возвращает последний день месяца
для указанной даты.
lastDayOfMonth(date)
| Аргумент | Тип | Описание |
|---|---|---|
date |
Date \| number |
Исходная дата |
Возвращает объект Date, представляющий последний день
месяца.
const lastDayOfMonth = require('date-fns/lastDayOfMonth')
import lastDayOfMonth fr om 'date-fns/lastDayOfMonth'
import { lastDayOfMonth } from 'date-fns'
import { lastDayOfMonth } from 'date-fns'
const date = new Date(2026, 1, 10)
const result = lastDayOfMonth(date)
console.log(result)
Результат:
2026-02-28T00:00:00.000Z
Функция автоматически учитывает:
import { lastDayOfMonth } from 'date-fns'
const date = new Date(2024, 1, 10)
console.log(lastDayOfMonth(date))
Результат:
Thu Feb 29 2024
Внутренне логика похожа на:
0.Упрощённый аналог:
function customLastDayOfMonth(date) {
return new Date(
date.getFullYear(),
date.getMonth() + 1,
0
)
}
import { lastDayOfMonth } from 'date-fns'
const result = lastDayOfMonth(new Date())
console.log(result)
import {
lastDayOfMonth,
format
} from 'date-fns'
const result = lastDayOfMonth(new Date())
console.log(
format(result, 'dd.MM.yyyy')
)
import {
firstDayOfMonth,
lastDayOfMonth
} from 'date-fns'
const currentDate = new Date()
const period = {
start: firstDayOfMonth(currentDate),
end: lastDayOfMonth(currentDate)
}
console.log(period)
import {
firstDayOfMonth,
lastDayOfMonth
} from 'date-fns'
const start = firstDayOfMonth(new Date())
const end = lastDayOfMonth(new Date())
const filteredOrders = orders.filter(order => {
return order.date >= start &&
order.date <= end
})
import {
eachDayOfInterval,
firstDayOfMonth,
lastDayOfMonth
} from 'date-fns'
const start = firstDayOfMonth(new Date())
const end = lastDayOfMonth(new Date())
const days = eachDayOfInterval({
start,
end
})
console.log(days)
import {
firstDayOfMonth,
lastDayOfMonth
} from 'date-fns'
function getMonthRange(date) {
return {
start: firstDayOfMonth(date),
end: lastDayOfMonth(date)
}
}
import {
firstDayOfMonth,
lastDayOfMonth,
formatISO
} from 'date-fns'
const start = formatISO(
firstDayOfMonth(new Date())
)
const end = formatISO(
lastDayOfMonth(new Date())
)
fetch('/api/statistics', {
method: 'POST',
body: JSON.stringify({
start,
end
})
})
import {
subMonths,
lastDayOfMonth
} from 'date-fns'
const previousMonth = subMonths(new Date(), 1)
console.log(
lastDayOfMonth(previousMonth)
)
import {
addMonths,
lastDayOfMonth
} from 'date-fns'
const nextMonth = addMonths(new Date(), 1)
console.log(
lastDayOfMonth(nextMonth)
)
endOfDaylastDayOfMonth возвращает дату с сохранением времени, а
не конец суток. Для получения полного окончания месяца обычно используют
endOfDay.
import {
lastDayOfMonth,
endOfDay
} from 'date-fns'
const result = endOfDay(
lastDayOfMonth(new Date())
)
console.log(result)
Результат:
2026-05-31T23:59:59.999
lastDayOfMonth от endOfMonthlastDayOfMonthВозвращает последний календарный день.
2026-05-31T00:00:00.000
endOfMonthВозвращает конец месяца с максимальным временем суток.
2026-05-31T23:59:59.999
import {
lastDayOfMonth,
endOfMonth
} from 'date-fns'
const date = new Date()
console.log(lastDayOfMonth(date))
console.log(endOfMonth(date))
lastDayOfMonth('2026-05-10')
Хотя JavaScript может преобразовать строку автоматически,
рекомендуется явно создавать объект Date.
Правильно:
lastDayOfMonth(
new Date('2026-05-10')
)
date-fns не изменяет исходный объект.
const original = new Date()
const result = firstDayOfMonth(original)
console.log(original)
console.log(result)
Это важное преимущество библиотеки.
import {
firstDayOfMonth,
lastDayOfMonth,
format
} from 'date-fns'
function generateReportPeriod(date) {
return {
start: format(
firstDayOfMonth(date),
'yyyy-MM-dd'
),
end: format(
lastDayOfMonth(date),
'yyyy-MM-dd'
)
}
}
console.log(
generateReportPeriod(new Date())
)
import {
firstDayOfMonth,
lastDayOfMonth,
format
} from 'date-fns'
function getFormattedPeriod(date) {
const start = firstDayOfMonth(date)
const end = lastDayOfMonth(date)
return `
${format(start, 'dd.MM.yyyy')}
-
${format(end, 'dd.MM.yyyy')}
`
}
console.log(
getFormattedPeriod(new Date())
)
import {
firstDayOfMonth,
lastDayOfMonth
} from 'date-fns'
function filterTransactions(
transactions,
date
) {
const start = firstDayOfMonth(date)
const end = lastDayOfMonth(date)
return transactions.filter(item => {
return item.createdAt >= start &&
item.createdAt <= end
})
}