React 时间选择器

2025年3月17日 | 阅读 12 分钟

时间选择器允许用户选择任意一个时间。

时间选择器允许用户选择单个时间(以小时或分钟格式)。实心圆表示时钟末端已选定的时间。

React 应用程序的时间选择器。

  • 它几乎支持任何语言。
  • 只需安装 npm 即可执行 add react-time-pickeryarn add react-time-picker operator。
  • 然后,通过从 'react-time-picker' 导入 TimePicker 来导入它。
  • 我们可以通过添加 <Time Picker /> 来使用它。

注意:react-time-picker 与 react-date-picker 或 react-date time-picker 配合使用效果更佳。

开始

该项目使用 React 16.3 或更高版本。如果您使用的是旧版 React,请参考下表查找相应的 react-time-picker 版本。

React 版本最新兼容的 react-time-picker 版本
16.3最新
16.03.x

旧版浏览器

如果您想支持 Internet Explorer 10 等旧版浏览器,则需要使用 Intl.js 或 Intl polyfill 与 React-Date-Picker。

安装过程

首先,通过执行 npm install react-time-pickeyarn add react-time-picker 将 react-time-picker 添加到项目中。

示例 1

自定义样式

如果我们不从 'react-time-picker/dist/entry.nostyle' 导入 Time Picker,然后导入 react time picker;如果我们使用默认的 react time picker,它将无法正常工作。

默认输入文件加载的样式是 React-time-picker/dist/TimePicker.cssReact-clock/dist/Clock.css

您需要将其复制到项目中才能进行构建。

用户指南

它显示带有自定义输入、原生输入和时钟的输入字段。

属性

属性名称描述默认值示例值
amPmAriaLabelaria-label 主要用于 amPmAriaLabel 中的 AM/PM 选择。不适用"选择 AM/PM"
className类名将与“react-time-picker”一起添加到父 React-Time-Picker <div> 元素。不适用字符串:“class1 class2”
字符串数组:“["class4", "class5 class6"]”
autoFocusautoFocus 聚焦于输入部分。不适用true
clearAriaLabelcleararia-label 用于删除按钮。不适用"清除值"
clockAriaLabelaria-label 用于时钟按钮。不适用"切换时钟"
clearIcon这是删除按钮的内容。将其设置为空值将隐藏图标。(默认图标)字符串:“清除”
React 元素:<ClearIcon />
clockClassName类名用于添加到父 React-Clock <time> 元素上的“react-clock”。不适用字符串:“class1 class2”
字符串数组:“["classA", "classB classc"]”
clockIcon它用于时钟内容按钮。将其值设为 null 会隐藏图标。(默认图标)字符串:“时钟”
React 元素:<ClockIcon />
disabled时间选择器将被禁用。falsetrue
closeClock选择值后,它将关闭时钟。truefalse
disableClock设置为 true 时,它会通过切换可见性来移除时钟和按钮。falsetrue
hourAriaLabel这是输入时间的 area-label。不适用"小时"
格式它支持基于 Unicode 技术标准的输入格式。支持的值有:hh、m、mm、s、ss、a、H、HH、h。不适用"h:m:s a"
hourPlaceholder时间输入的占位符。"--""hh"
isOpen用于打开手表功能。falsetrue
locale这是 IETF 语言标签。用户浏览器设置"hu-HU"
minuteAriaLabelminuteAria-label 用于分钟输入。不适用"分钟"
maxDetail可以是“hour”、“minute”或“second”。此处将使用详细选择。"分钟""秒"
maxTime用户可以在此处选择最晚时间。不适用日期:new Date()
字符串:“23:11:00”
minTime用户可以在此处选择最早时间。不适用日期:new Date()
字符串:“12:18:00”
nativeInputAriaLabelnativeAria-label 是一个原生时间输入。不适用"时间"
onChange在用户选择有效时间时调用。不适用(值)=> alert('新时间是:', 值)
onClockOpen打开时钟时使用 onClockOpen。不适用() => alert('时钟已打开')
onClockClose关闭时钟时工作。不适用() => alert('时钟已关闭')
必需如果需要输入日期。falsetrue
secondAriaLabelsecondAria-label 用于秒输入。不适用"秒"
openClockOnFocus用于在输入焦点时打开时钟。truefalse
secondPlaceholder秒占位符主要用于秒输入。"--""ss"
这只是我们使用的输入值。不适用日期:new Date()
字符串:“20:11:00”

时钟

time picker 组件将传递 react-clock 的属性,除了 clockClassName 中使用的类名。

时间选择器的类型

各种类型的时间选择器,包括下拉式、滚动式和滚轮式。时间选择器的 UI 设计帮助我们确定在 React 中使用的类型。

1. 下拉式

下拉式时间选择器是最简单的时间选择器,通常用于通过下拉格式选择小时和分钟。它不像其他时间选择器那样直观,但比传统的文本框要好,因为它允许我们选择选项,而不是让用户自行输入。这有助于澄清对所需格式的困惑。

React Time-Picker

图片由 Clue Mediator 提供

2. 滚动式

当我们使用滚动选择器时,顾名思义,用户将滚动来选择所需日期或时间信息。

React Time-Picker

图片由 Hossein 提供

滚轮式

滚轮式时间选择器模拟真实时钟,使客户更容易选择确切的时间。

它会询问时间或直观地更改滚轮上的数字,立即选择下一分钟。根据实现方式,我们可以通过多种方式更改分钟值。

一些滚轮式时间选择器在选择后显示数字(例如,小时或分钟),并有一些按钮供我们选择。这些按钮是简单的箭头,允许我们切换小时和分钟时钟箭头。

React Time-Picker

图片由 Vonovak 提供

时间选择器的实现

既然我们知道时间选择器有多么有用,您将学习如何借助 React 来创建它。本教程专注于使用 Material-UI 的时间选择器,因为它是 GitHub 上最受欢迎的 React 库。

开始之前,我们需要在系统中下载并安装 Node.js 和 npm。

创建应用

为了开始,我们需要在将要构建时间选择器的相同位置构建您的 React 应用。在 CMD 中运行以下命令

此命令会生成带有以下文件的 React 应用

React Time-Picker

安装库

在使用 Material-UI 中的时间选择器之前,我们需要安装两个库:第一个是 Material-UI 库,第二个是处理我们日期的库。

许多开发人员使用 Moment.js,因为它易于使用;然而,date-fns 的包大小只有 Moment.js(71.9 kB)的四分之一(19.5 kB),这使得 date-fns 成为一个更快的选择。

要安装库,我们必须使用 npm,它是 React 应用的默认包。

使用命令 cd time-picker 开始更改当前项目(之前安装的)的目录。

最后,在此处安装 Material-UI 和 date-fns

cd time selector

创建时间选择器

现在,我们将构建一个时间选择器。您在 Material-UI 库中有许多选项可供选择

  • 桌面日期: 它为我们的桌面选择具有合适用户界面的日期。
  • 移动端日期: 它为移动设备选择具有合适用户界面的日期。
  • 时间: 它是一个主要用于时间的选
  • 日期和时间: 这是一个具有内置日期和时间功能的选择器。

现在让我们看看每个选项的实际应用

在此代码中,我们导入了所需的库。它包括 React 和许多时间选择器,如: (DateTimePicker, DesktopDatePicker, TimePicker, and MobileDatePicker) 来自 Material-UI 库。

代码将包括 date-fns 的适配器 (AdapterDateFns),它处理日期,并导入有助于构建页面的格式。

在这里,我们定义了 app 组件,并使用 app 的默认导出函数导出它。您可以不使用 export default 定义它,然后使用 export default apps 导出它;但是,此解决方案是最简单的选项。

我们需要跟踪日期,并在每次更改后存储一个新值。如果您不跟踪更改,则在选择新时间时日期和时间将不会更新。在上面的代码中,useState() hook 初始化日期 (2014-08-18T21:11:54),handleChange 函数将处理更改。

现在我们想要 JSX,即 JavaScript 语言语法的 React 扩展,以在此处创建一个实时选择器。

JSX 提供了一个结构化组件,该组件使用开发者熟悉的语法进行渲染。它的外观与 HTML 相同。

上面,我们还使用 Material-UI 中的选择器模块创建了选择器,并带有用于标签、值、onChange 和 inputFormat 的适当属性,这些属性指示日期显示格式。

之后,我们使用 LocalizationProvider 将各个模块组合成单个父元素。它表明您正在使用 date-fns 库来处理日期。

最后,我们必须应用边距,以便时间选择器在网页中间对齐。这是通过将代码封装在 div 元素中并通过内联样式为其应用边距来完成的。

以下是需要放置在 src/App.js 中的代码片段,以便 App 组件在 index.js 中导出并在屏幕上显示。

使用 npm start 命令启动应用程序,并在浏览器中导航到 URL https://:3000/

React Time-Picker

样式化时间选择器

大多数组织都有自己希望添加到时间选择器的品牌,因此 Material-UI 允许您添加两个导入来为页面添加任何主题。一个导入允许我们创建和应用主题,另一个允许我们添加任何特定颜色。

要开始样式化时间选择器,请在 src/App.js 文件的顶部添加以下导入

接下来,我们必须为您的组件创建一个主题(通过 createTheme 函数)。在示例中,我们将重点关注排版和颜色,但我们可以根据需要自定义时间选择器。

我们需要在 src/App.js 文件中的导入和 app 组件之间添加以下代码来创建主题

样式过程的最后一步是我们将主题应用于组件。为此,我们需要用 ThemeProvider 元素包装 div 元素并将主题传递给它。

代码将 createTheme() 函数中选择的参数应用到网站的主题。

时间选择器的基本用法

时间选择器在移动设备上渲染为模态对话框,在桌面设备上则使用带弹出窗口的文本框。

输出

React Time-Picker

当我们点击这里并输入 AM/PM 时间时,它将显示如下。

React Time-Picker

静态模式

可以内联读取任何时间选择器。这将允许构建自定义弹出/模态容器。

输出

React Time-Picker

响应性 (Responsiveness)

时间选择器组件由运行它的设备决定。

  • MobileTimePicker 组件适用于小型屏幕和触摸设备。
  • DesktopTimePicker 组件适用于大中型设备和鼠标设备,如笔记本电脑和 PC。
  • 默认情况下,当 @media(pointer:good) 查询匹配 timepicker 时,timePicker 组件将读取桌面版本。可以通过 desktopModeMediaQuery 属性进行自定义。

输出

React Time-Picker

当我们点击手机应用时

React Time-Picker

当我们点击桌面时

React Time-Picker

表单属性

时间选择器将禁用或设置为只读。

输出

React Time-Picker

时间验证

输出

React Time-Picker
React Time-Picker

横向

输出

React Time-Picker

子组件

一些低级子组件(ClockPicker)被导出。它们在没有包装器和外部逻辑的情况下被读取,例如蒙版输入、日期值解析验证等。

输出

React Time-Picker
React Time-Picker

第二个

秒输入用作选择准确时间点的依据。

输出

React Time-Picker

当我们想要秒时

React Time-Picker

当我们同时需要分钟和秒时

React Time-Picker