Skip to content

Commit 2a56a61

Browse files
committed
feat: ✨ 添加日期格式设置!
1 parent 3c48ed5 commit 2a56a61

File tree

4 files changed

+33
-25
lines changed

4 files changed

+33
-25
lines changed

README.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,17 @@ const styles = StyleSheet.create({
7373

7474
## Calendar props
7575

76-
| Name | Type | Default | Description |
77-
| --------------- | ---------- | ------------- | ----------------------------------------------------------------- |
78-
| mode | `string` | `'single'` | 定义 DatePicker 的模式 `['single', 'range', 'multiple', 'wheel']` |
79-
| locale | `string` | `'zh-cn'` | 定义 DatePicker 的语言环境,使用其他语言需要从dayjs引入语言包 |
80-
| minDate | `DateType` | `null` | 定义 DatePicker 的最小可选日期 |
81-
| maxDate | `DateType` | `null` | 定义 DatePicker 的最大可选日期 |
82-
| firstDayOfWeek | `number` | `0` | 定义一周的起始日,范围为 0-6,其中 0 表示星期天,6 表示星期六 |
83-
| displayFullDays | `boolean` | `false` | 定义是否在当前日历视图中显示上个月和下个月的日期 |
84-
| initialView | `string` | `'day'` | 定义 DatePicker 的初始视图 `['day', 'month', 'year', 'time']` |
85-
| height | `number` | `'undefined'` | 定义日历视图的高度 |
76+
| Name | Type | Default | Description |
77+
| --------------- | ---------- | ----------------------- | ----------------------------------------------------------------- |
78+
| mode | `string` | `'single'` | 定义 DatePicker 的模式 `['single', 'range', 'multiple', 'wheel']` |
79+
| locale | `string` | `'zh-cn'` | 定义 DatePicker 的语言环境,使用其他语言需要从dayjs引入语言包 |
80+
| minDate | `DateType` | `null` | 定义 DatePicker 的最小可选日期 |
81+
| maxDate | `DateType` | `null` | 定义 DatePicker 的最大可选日期 |
82+
| firstDayOfWeek | `number` | `0` | 定义一周的起始日,范围为 0-6,其中 0 表示星期天,6 表示星期六 |
83+
| displayFullDays | `boolean` | `false` | 定义是否在当前日历视图中显示上个月和下个月的日期 |
84+
| initialView | `string` | `'day'` | 定义 DatePicker 的初始视图 `['day', 'month', 'year', 'time']` |
85+
| height | `number` | `'undefined'` | 定义日历视图的高度 |
86+
| format | `string` | `'YYYY/MM/DD HH:mm:ss'` | 设置日期格式 |
8687

8788
<p align="center">
8889
<img src="/screenshot/modes-screenshot.png" />

src/DateTimePicker.tsx

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import relativeTime from 'dayjs/plugin/relativeTime';
1313
import localizedFormat from 'dayjs/plugin/localizedFormat';
1414
import 'dayjs/locale/zh-cn';
1515
import {
16-
getFormatted,
1716
dateToUnix,
1817
getEndOfDay,
1918
getStartOfDay,
@@ -100,6 +99,7 @@ const DateTimePicker: React.FC<
10099
startDate,
101100
endDate,
102101
dates,
102+
format = 'YYYY-MM-DD HH:mm:ss',
103103
onChange,
104104
initialView = 'day',
105105
height,
@@ -306,21 +306,27 @@ const DateTimePicker: React.FC<
306306
});
307307

308308
(onChange as SingleChange)?.({
309-
date: newDate,
309+
date: dayjs(newDate).format(format),
310310
});
311311
} else if (mode === 'range') {
312312
const sd = stateRef.current.startDate;
313313
const ed = stateRef.current.endDate;
314314

315315
let newDateRang: Parameters<RangeChange>[0] = {
316-
startDate: getStartOfDay(datetime),
316+
startDate: getStartOfDay(datetime).format(format),
317317
endDate: undefined,
318318
};
319319
if (sd && !ed) {
320320
if (dateToUnix(datetime) >= dateToUnix(sd!)) {
321-
newDateRang = { startDate: sd, endDate: getEndOfDay(datetime) };
321+
newDateRang = {
322+
startDate: dayjs(sd).format(format),
323+
endDate: getEndOfDay(datetime).format(format),
324+
};
322325
} else {
323-
newDateRang = { startDate: getStartOfDay(datetime), endDate: sd };
326+
newDateRang = {
327+
startDate: getStartOfDay(datetime).format(format),
328+
endDate: dayjs(sd).format(format),
329+
};
324330
}
325331
}
326332

@@ -343,8 +349,8 @@ const DateTimePicker: React.FC<
343349
newDates.sort((a, b) => (dayjs(a).isAfter(dayjs(b)) ? 1 : -1));
344350

345351
const newDatesObj = {
346-
dates: newDates,
347-
datePressed: newDate,
352+
dates: newDates.map((d) => dayjs(d).format(format)),
353+
datePressed: newDate.format(format),
348354
change: (exists
349355
? 'removed'
350356
: 'added') as Parameters<MultiChange>[0]['change'],
@@ -363,11 +369,11 @@ const DateTimePicker: React.FC<
363369
});
364370

365371
(onChange as SingleChange)?.({
366-
date: datetime,
372+
date: dayjs(datetime).format(format),
367373
});
368374
}
369375
},
370-
[onChange, mode, timePicker]
376+
[format, mode, timePicker, onChange]
371377
);
372378

373379
const onSelectMonth = useCallback(
@@ -381,9 +387,9 @@ const DateTimePicker: React.FC<
381387
});
382388
if (mode !== 'wheel') setCalendarView('day');
383389
if (mode === 'single' || mode === 'wheel')
384-
(onChange as SingleChange)?.({ date: getFormatted(newDate) });
390+
(onChange as SingleChange)?.({ date: newDate.format(format) });
385391
},
386-
[maxDate, minDate, mode, onChange, setCalendarView]
392+
[format, maxDate, minDate, mode, onChange, setCalendarView]
387393
);
388394

389395
const onSelectYear = useCallback(
@@ -397,9 +403,9 @@ const DateTimePicker: React.FC<
397403
});
398404
if (mode !== 'wheel') setCalendarView('day');
399405
if (mode === 'single' || mode === 'wheel')
400-
(onChange as SingleChange)?.({ date: getFormatted(newDate) });
406+
(onChange as SingleChange)?.({ date: newDate.format(format) });
401407
},
402-
[maxDate, minDate, mode, setCalendarView, onChange]
408+
[format, maxDate, minDate, mode, setCalendarView, onChange]
403409
);
404410

405411
const onChangeMonth = useCallback((month: number) => {

src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export type CalendarAction = {
2525
};
2626

2727
export type CalendarThemeProps = {
28+
format?: string;
2829
containerStyle?: ViewStyle;
2930
headerButtonsPosition?: HeaderButtonPositions;
3031
headerContainerStyle?: ViewStyle;

src/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,11 @@ export function getFirstDayOfMonth(
154154
return d.date(1 - firstDayOfWeek).day();
155155
}
156156

157-
export function getStartOfDay(date: DateType): DateType {
157+
export function getStartOfDay(date: DateType): dayjs.Dayjs {
158158
return dayjs(date).startOf('day');
159159
}
160160

161-
export function getEndOfDay(date: DateType): DateType {
161+
export function getEndOfDay(date: DateType): dayjs.Dayjs {
162162
return dayjs(date).endOf('day');
163163
}
164164

0 commit comments

Comments
 (0)