Month
Usage
Month is the most basic @mantine/dates component, it displays single month without any controls to change current month. Component is used as base for Calendar, DatePicker and other components. You can use Month to build custom date or date range pickers that are not included in @mantine/dates but in most cases other components will be more suitable in your application.
Mo | Tu | We | Th | Fr | Sa | Su |
---|---|---|---|---|---|---|
import { useState } from 'react';import { Month } from '@mantine/dates';function Demo() {const [value, setValue] = useState(new Date());return <Month month={value} value={value} onChange={setValue} />;}
Localization
All @mantine/dates components are built with dayjs library.
Default locale is en
, to change this follow dayjs localization guide:
// First import locale dataimport 'dayjs/locale/ru';
Then set locale
prop in component:
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
---|---|---|---|---|---|---|
import { useState } from 'react';import 'dayjs/locale/ru';function Demo() {const [value, setValue] = useState(new Date());return <Month locale="ru" month={value} value={value} onChange={setValue} />;}
Range
Highligh dates range with range
prop. Prop accepts an array with two dates, later date must always go last:
Mo | Tu | We | Th | Fr | Sa | Su |
---|---|---|---|---|---|---|
const range = [dayjs(new Date()).startOf('month').toDate(),dayjs(new Date()).startOf('month').add(4, 'days').toDate(),];<Month range={range} month={new Date()} />
Min and max dates
Set minDate
and maxDate
props to define minimum and maximum possible dates.
Dates which are not included in available interval will be disabled:
Mo | Tu | We | Th | Fr | Sa | Su |
---|---|---|---|---|---|---|
import { useState } from 'react';import dayjs from 'dayjs';import { Month } from '@mantine/dates';function Demo() {const initialDate = dayjs(new Date()).startOf('month').add(10, 'days').toDate();const [value, setValue] = useState(initialDate);return (<Monthmonth={value}value={value}onChange={setValue}minDate={dayjs(new Date()).startOf('month').add(5, 'days').toDate()}maxDate={dayjs(new Date()).endOf('month').subtract(5, 'days').toDate()}/>);}
Exclude dates
To exclude dates set excludeDates
prop with function that receives date as an argument and returns
true
if date should be disabled. For example, to disable weekends check if date day is 0 or 6:
Mo | Tu | We | Th | Fr | Sa | Su |
---|---|---|---|---|---|---|
<Month excludeDate={(date) => date.getDay() === 0 || date.getDay() === 6} />
Hide weekdays names
To hide weekdays names row set hideWeekdays
prop:
<Month hideWeekdays />
Add styles to days
You can apply styles to any day with dayStyle
or dayClassName
callbacks.
Both functions receive two arguments:
date
– date object which is used to render daymodifiers
– modifiers that are applied to day
Modifiers
interface DayModifiers {/** Is date selected and is first or last in range? */selectedInRange: boolean;/** Is date equal to value? */selected: boolean;/** Based on minDate, maxDate, excludeDate and disableOutsideEvents props */disabled: boolean;/** Is date is range? */inRange: boolean;/** Is date first or last in given range? */firstInRange: boolean;lastInRange: boolean;/** Is date Saturday or Sunday? */weekend: boolean;/** Is date outside of given month? */outside: boolean;}
Styles based on date
dayStyle
callback allows you to add inline styles to days.
Function must return either styles object or null.
In this example we will add red background to each Friday 13th based on date (first argument):
Mo | Tu | We | Th | Fr | Sa | Su |
---|---|---|---|---|---|---|
<Monthmonth={new Date(2021, 7)}dayStyle={(date) =>date.getDay() === 5 && date.getDate() === 13? { backgroundColor: theme.colors.red[9], color: theme.white }: null}/>
Styles based on modifiers
dayClassName
callback allows you to add className to days.
Function must return either className string or null.
In this example we will hide all outside dates and change color of weekends based on modifiers (second argument):
Mo | Tu | We | Th | Fr | Sa | Su |
---|---|---|---|---|---|---|
import cx from 'clsx';import { createUseStyles } from 'react-jss';import { theming } from '@mantine/core';import { Month } from '@mantine/dates';const useStyles = createUseStyles((theme) => ({outside: {opacity: 0,},weekend: {color: `${theme.colors.blue[6]} !important`,},}),{ theming });function Demo() {const classes = useStyles();return (<MonthdisableOutsideEventsmonth={new Date(2021, 7)}dayClassName={(date, modifiers) =>cx({ [classes.outside]: modifiers.outside, [classes.weekend]: modifiers.weekend })}/>);}