# jQuery UI API - 日期选择器部件(Datepicker Widget)
## 所属类别
[小部件(Widgets)](ref-widgets.html)
## 用法
**描述:**从弹出框或内联日历选择一个日期。
**版本新增:**1.0
jQuery UI 日期选择器(Datepicker)是向页面添加日期选择功能的高度可配置插件。您可以自定义日期格式和语言,限制可选择的日期范围,添加按钮和其他导航选项。
默认情况下,当相关的文本域获得焦点时,在一个小的覆盖层打开日期选择器。对于一个内联的日历,只需简单地将日期选择器附加到 div 或者 span 上。
### 键盘交互
当日期选择器打开时,下面的键盘命令可用:
* PAGE UP:移到上一个月。
* PAGE DOWN:移到下一个月。
* CTRL+PAGE UP:移到上一年。
* CTRL+PAGE DOWN:移到下一年。
* CTRL+HOME:移到当前月份。如果日期选择器是关闭的则打开。
* CTRL+LEFT:移到上一天。
* CTRL+RIGHT:移到下一天。
* CTRL+UP:移到上一周。
* CTRL+DOWN:移到下一周。
* ENTER:选择聚焦的日期。
* CTRL+END:关闭日期选择器,并清除日期。
* ESCAPE:关闭日期选择器,不做任何选择。
### 实用功能
#### $.datepicker.setDefaults( settings )
为所有的日期选择器改变默认设置。
使用 [`option()`](#method-option) 方法来改变个别实例的设置。
**代码实例:**
设置所有的日期选择器在获得焦点时或点击图标时打开。
```
$.datepicker.setDefaults({
showOn: "both",
buttonImageOnly: true,
buttonImage: "calendar.gif",
buttonText: "Calendar"
});
```
设置所有的日期选择器都有法语文本。
```
$.datepicker.setDefaults( $.datepicker.regional[ "fr" ] );
```
#### $.datepicker.formatDate( format, date, settings )
格式化日期为一个带有指定格式的字符串值。
格式可以是下列组合:
* d - 一月中的第几天(没有前导零)
* dd - 一月中的第几天(两位数)
* o - 一年中的第几天(没有前导零)
* oo - 一年中的第几天(三位数)
* D - 天的短名称
* DD - 天的长名称
* m - 一年中的第几月(没有前导零)
* mm - 一年中的第几月(两位数)
* M - 月的短名称
* MM - 月的长名称
* y - 年(两位数)
* yy - 年(四位数)
* @ - Unix 时间戳(ms since 01/01/1970)
* ! - Windows 钟表(100ns since 01/01/0001)
* '...' - 文本
* '' - 单引号
* 其他 - 文本
也有一些 `$.datepicker` 预定义的标准日期格式:
* ATOM - 'yy-mm-dd' (与 RFC 3339/ISO 8601 相同)
* COOKIE - 'D, dd M yy'
* ISO_8601 - 'yy-mm-dd'
* RFC_822 - 'D, d M y' (参照 RFC 822)
* RFC_850 - 'DD, dd-M-y' (参照 RFC 850)
* RFC_1036 - 'D, d M y' (参照 RFC 1036)
* RFC_1123 - 'D, d M yy' (参照 RFC 1123)
* RFC_2822 - 'D, d M yy' (参照 RFC 2822)
* RSS - 'D, d M y' (与 RFC 822 相同)
* TICKS - '!'
* TIMESTAMP - '@'
* W3C - 'yy-mm-dd' (与 ISO 8601 相同)
**代码实例:**
以 ISO 格式显示日期。产生 "2007-01-26"。
```
$.datepicker.formatDate( "yy-mm-dd", new Date( 2007, 1 - 1, 26 ) );
```
以扩展法语格式显示日期。产生 "Samedi, Juillet 14, 2007"。
```
$.datepicker.formatDate( "DD, MM d, yy", new Date( 2007, 7 - 1, 14 ), {
dayNamesShort: $.datepicker.regional[ "fr" ].dayNamesShort,
dayNames: $.datepicker.regional[ "fr" ].dayNames,
monthNamesShort: $.datepicker.regional[ "fr" ].monthNamesShort,
monthNames: $.datepicker.regional[ "fr" ].monthNames
});
```
#### $.datepicker.parseDate( format, value, settings )
从一个指定格式的字符串值中提取日期。
格式可以是下列组合:
* d - 一月中的第几天(没有前导零)
* dd - 一月中的第几天(两位数)
* o - 一年中的第几天(没有前导零)
* oo - 一年中的第几天(三位数)
* D - 星期几的短名称
* DD - 星期几的长名称
* m - 一年中的第几月(没有前导零)
* mm - 一年中的第几月(两位数)
* M - 月的短名称
* MM - 月的长名称
* y - 年(两位数)
* yy - 年(四位数)
* @ - Unix 时间戳(ms since 01/01/1970)
* ! - Windows 钟表(100ns since 01/01/0001)
* '...' - 文本
* '' - 单引号
* 其他 - 文本
一些可能被抛出的异常:
* 'Invalid arguments' - 如果格式或值为空则抛出此异常。
* 'Missing number at position nn' - 如果格式显示一个未找到的数值则抛出此异常。
* 'Unknown name at position nn' - 如果格式显示一个未找到的星期几名称或月份名称则抛出此异常。
* 'Unexpected literal at position nn' - 如果格式显示一个未找到的文本值则抛出此异常。
* 'Invalid date' - 如果日期无效则抛出此异常,比如 '31/02/2007'。
**代码实例:**
提取一个 ISO 格式的日期。
```
$.datepicker.parseDate( "yy-mm-dd", "2007-01-26" );
```
提取一个扩展法语格式的日期。
```
$.datepicker.parseDate( "DD, MM d, yy", "Samedi, Juillet 14, 2007", {
shortYearCuroff: 20,
dayNamesShort: $.datepicker.regional[ "fr" ].dayNamesShort,
dayNames: $.datepicker.regional[ "fr" ].dayNames,
monthNamesShort: $.datepicker.regional[ "fr" ].monthNamesShort,
monthNames: $.datepicker.regional[ "fr" ].monthNames
});
```
#### $.datepicker.iso8601Week( date )
确定一个给定的日期在一年中的第几周:1 到 53。
该函数使用 ISO 8601 定义一周:一周从星期一开始,每一年的第一周包含 1 月 4 日。这意味着上一年至多有三天可能包含在当年的第一周中,当年至多有三天可能包含在上一年的最后一周中。
该函数是 [`calculateWeek`](#option-calculateWeek) 选项的默认实现。
**代码实例:**
查找日期在一年中的第几周。
```
$.datepicker.iso8601Week( new Date( 2007, 1 - 1, 26 ) );
```
#### $.datepicker.noWeekends
设置如 beforeShowDay 函数,防止选择周末。
我们可以在 [`beforeShowDay`](#option-beforeShowDay) 选项中提供 `noWeekends()` 函数,用来计算所有工作日,提供一个 `true`/`false` 值的数组,用来指示日期是否可选择。
**代码实例:**
设置 DatePicker,让周末不可选。
```
$( "#datepicker" ).datepicker({
beforeShowDay: $.datepicker.noWeekends
});
```
### 局限
日期选择器提供了迎合不同的语言和日期格式本地化内容的支持。每个本地化包含在名称后追加语言代码的文件中,例如法语为 `jquery.ui.datepicker-fr.js`。所需的本地化文件需要包含在主要的日期选择器代码后面。每个本地化文件添加了它自己的设置到可用的本地化集合中,所有实例自动应用这些设置为默认设置。
`$.datepicker.regional` 属性保存了一个本地化数组,以语言代码作为前置,默认前置为 `""`,表示英语。每个条目是一个带有下列属性的对象:`closeText`、`prevText`、`nextText`、`currentText`、`monthNames`、`monthNamesShort`、`dayNames`、`dayNamesShort`、`dayNamesMin`、`weekHeader`、`dateFormat`、`firstDay`、`isRTL`、`showMonthAfterYear` 和 `yearSuffix`。
您可以通过下面代码恢复默认的本地化:
`$.datepicker.setDefaults( $.datepicker.regional[ "" ] );`
您可以通过下面代码覆盖一个特定地点的日期选择器:
`$( selector ).datepicker( $.datepicker.regional[ "fr" ] );`
### 主题化
日期选择器部件(Datepicker Widget)使用 [jQuery UI CSS 框架](api-css-framework.html) 来定义它的外观和感观的样式。如果需要使用日期选择器指定的样式,则可以使用下面的 CSS class 名称:
* `ui-datepicker`:日期选择器的外层容器。如果日期选择器是内联的,该元素会另外带有一个 `ui-datepicker-inline` class。如果设置了 [`isRTL`](#option-isRTL) 选项,该元素会另外带有一个 `ui-datepicker-rtl` class。
* `ui-datepicker-header`:日期选择器的头部容器。
* `ui-datepicker-prev`:用于选择上一月的控件。
* `ui-datepicker-next`:用于选择下一月的控件。
* `ui-datepicker-title`:日期选择器包含月和年的标题容器。
* `ui-datepicker-month`:月的文本显示,如果设置了 [`changeMonth`](#option-changeMonth) 选项则显示 `<select>` 元素。
* `ui-datepicker-year`:年的文本显示,如果设置了 [`changeYear`](#option-changeYear) 选项则显示 `<select>` 元素。
* `ui-datepicker-calendar`:包含日历的表格。
* `ui-datepicker-week-end`:周末的单元格。: Cells containing weekend days.
* `ui-datepicker-other-month`:发生在某月但不是当前月天数的单元格。
* `ui-datepicker-unselectable`:用户不可选择的单元格。
* `ui-datepicker-current-day`:已选中日期的单元格。
* `ui-datepicker-today`:当天日期的单元格。
* `ui-datepicker-buttonpane`:当设置 [`showButtonPanel`](#option-showButtonPanel) 选项时使用按钮面板(buttonpane)。
* `ui-datepicker-current`:用于选择当天日期的按钮。
如果 [`numberOfMonths`](#option-numberOfMonths) 选项用于显示多个月份,则使用一些额外的 class:
* `ui-datepicker-multi`:一个多月份日期选择器的最外层容器。该元素会根据要显示的月份个数另外带有 `ui-datepicker-multi-2`、`ui-datepicker-multi-3` 或 `ui-datepicker-multi-4` class 名称。
* `ui-datepicker-group`:分组内单独的选择器。该元素会根据它在分组中的位置另外带有 `ui-datepicker-group-first`、`ui-datepicker-group-middle` 或 `ui-datepicker-group-last` class 名称。
### 依赖
* [UI 核心(UI Core)](ref-ui-core.html)
* [特效核心(Effects Core)](ref-effects-core.html)(可选的;当与 [`showAnim`](#option-showAnim) 选项一起使用时)
### 附加说明
* 该部件要求一些功能性的 CSS,否则将无法工作。如果您创建了一个自定义的主题,请使用小部件指定的 CSS 文件作为起点。
* 该部件以编程方式操作元素的值,因此当元素的值改变时不会触发原生的 `change` 事件。
* 不支持在 `<input type="date">` 上创建日期选择器,因为会造成与本地选择器的 UI 冲突。
## 实例
一个简单的 jQuery UI 日期选择器(Datepicker)。
```
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>日期选择器部件(Datepicker Widget)演示</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
</head>
<body>
<div id="datepicker"></div>
<script>
$( "#datepicker" ).datepicker();
</script>
</body>
</html>
```
- jQuery UI 基础
- jQuery UI 简介
- jQuery UI 下载
- jQuery UI 使用
- jQuery UI 定制
- jQuery UI 工作原理
- jQuery UI 主题
- jQuery UI 主题
- jQuery UI ThemeRoller
- jQuery UI CSS 框架 API
- jQuery UI 设计主题
- jQuery UI 部件库
- jQuery UI 部件库(Widget Factory)
- jQuery UI 通过部件库(Widget Factory)扩展小部件
- jQuery UI 小部件(Widget)方法调用
- jQuery UI 为什么使用部件库(Widget Factory)
- jQuery UI 如何使用部件库(Widget Factory)
- jQuery UI 实例
- jQuery UI 实例
- jQuery UI 实例 - 拖动(Draggable)
- jQuery UI 实例 - 放置(Droppable)
- jQuery UI 实例 - 缩放(Resizable)
- jQuery UI 实例 - 选择(Selectable)
- jQuery UI 实例 - 排序(Sortable)
- jQuery UI 实例 - 折叠面板(Accordion)
- jQuery UI 实例 - 自动完成(Autocomplete)
- jQuery UI 实例 - 按钮(Button)
- jQuery UI 实例 - 日期选择器(Datepicker)
- jQuery UI 实例 - 对话框(Dialog)
- jQuery UI 实例 - 菜单(Menu)
- jQuery UI 实例 - 进度条(Progressbar)
- jQuery UI 实例 - 滑块(Slider)
- jQuery UI 实例 - 旋转器(Spinner)
- jQuery UI 实例 - 标签页(Tabs)
- jQuery UI 实例 - 工具提示框(Tooltip)
- jQuery UI 实例 - 特效(Effect)
- jQuery UI 实例 - 显示(Show)
- jQuery UI 实例 - 隐藏(Hide)
- jQuery UI 实例 - 切换(Toggle)
- jQuery UI 实例 - 添加 Class(Add Class)
- jQuery UI 实例 - 移除 Class(Remove Class)
- jQuery UI 实例 - 切换 Class(Toggle Class)
- jQuery UI 实例 - 转换 Class(Switch Class)
- jQuery UI 实例 - 颜色动画(Color Animation)
- jQuery UI 实例 - 定位(Position)
- jQuery UI 实例 - 部件库(Widget Factory)
- jQuery UI API 参考
- jQuery UI API 类别 - 特效(Effects)
- jQuery UI API - .addClass()
- jQuery UI API - 百叶窗特效(Blind Effect)
- jQuery UI API - 反弹特效(Bounce Effect)
- jQuery UI API - 剪辑特效(Clip Effect)
- jQuery UI API - 颜色动画(Color Animation)
- jQuery UI API - 降落特效(Drop Effect)
- jQuery UI API - Easings
- jQuery UI API - .effect()
- jQuery UI API - 爆炸特效(Explode Effect)
- jQuery UI API - 淡入淡出特效(Fade Effect)
- jQuery UI API - 折叠特效(Fold Effect)
- jQuery UI API - .hide()
- jQuery UI API - 突出特效(Highlight Effect)
- jQuery UI API - 膨胀特效(Puff Effect)
- jQuery UI API - 跳动特效(Pulsate Effect)
- jQuery UI API - .removeClass()
- jQuery UI API - 缩放特效(Scale Effect)
- jQuery UI API - 震动特效(Shake Effect)
- jQuery UI API - .show()
- jQuery UI API - 尺寸特效(Size Effect)
- jQuery UI API - 滑动特效(Slide Effect)
- jQuery UI API - .switchClass()
- jQuery UI API - .toggle()
- jQuery UI API - .toggleClass()
- jQuery UI API - 转移特效(Transfer Effect)
- jQuery UI API 类别 - 特效核心(Effects Core)
- jQuery UI API - 颜色动画(Color Animation)
- jQuery UI API 类别 - 交互(Interactions)
- jQuery UI API - 可拖拽小部件(Draggable Widget)
- jQuery UI API - 可放置小部件(Droppable Widget)
- jQuery UI API - 鼠标交互(Mouse Interaction)
- jQuery UI API - 可调整尺寸小部件(Resizable Widget)
- jQuery UI API - 可选择小部件(Selectable Widget)
- jQuery UI API - 可排序小部件(Sortable Widget)
- jQuery UI API 类别 - 方法重载(Method Overrides)
- jQuery UI API - .focus()
- jQuery UI API - .position()
- jQuery UI API 类别 - 方法(Methods)
- jQuery UI API - .disableSelection()
- jQuery UI API - .enableSelection()
- jQuery UI API - .removeUniqueId()
- jQuery UI API - .scrollParent()
- jQuery UI API - .uniqueId()
- jQuery UI API - .zIndex()
- jQuery UI API 类别 - 选择器(Selectors)
- jQuery UI API - :data() Selector
- jQuery UI API - :focusable Selector
- jQuery UI API - :tabbable Selector
- jQuery UI API 类别 - 主题(Theming)
- jQuery UI API - CSS 框架(CSS Framework)
- jQuery UI API - 图标(Icons)
- jQuery UI API - 堆叠元素(Stacking Elements)
- jQuery UI API 类别 - UI 核心(UI Core)
- jQuery UI API 类别 - 实用工具(Utilities)
- jQuery UI API - 部件库(Widget Factory)
- jQuery UI API - 插件桥(Widget Plugin Bridge)
- jQuery UI API 类别 - 小部件(Widgets)
- jQuery UI API - 折叠面板部件(Accordion Widget)
- jQuery UI API - 自动完成部件(Autocomplete Widget)
- jQuery UI API - 按钮部件(Button Widget)
- jQuery UI API - 日期选择器部件(Datepicker Widget)
- jQuery UI API - 对话框部件(Dialog Widget)
- jQuery UI API - 菜单部件(Menu Widget)
- jQuery UI API - 进度条部件(Progressbar Widget)
- jQuery UI API - 滑块部件(Slider Widget)
- jQuery UI API - 旋转器部件(Spinner Widget)
- jQuery UI API - 标签页部件(Tabs Widget)
- jQuery UI API - 工具提示框部件(Tooltip Widget)
- jQuery EasyUI 简介
- jQuery EasyUI 应用
- jQuery EasyUI 应用 - 创建 CRUD 应用
- jQuery EasyUI 应用 - 创建 CRUD 数据网格(DataGrid)
- jQuery EasyUI 应用 - 创建展开行明细编辑表单的 CRUD 应用
- jQuery EasyUI 应用 - 创建 RSS Feed 阅读器
- jQuery EasyUI 拖放
- jQuery EasyUI 拖放 - 基本的拖动和放置
- jQuery EasyUI 拖放 - 创建拖放的购物车
- jQuery EasyUI 拖放 - 创建学校课程表
- jQuery EasyUI 菜单与按钮
- jQuery EasyUI 菜单与按钮 - 创建简单的菜单
- jQuery EasyUI 菜单与按钮 - 创建链接按钮(Link Button)
- jQuery EasyUI 菜单与按钮 - 创建菜单按钮(Menu Button)
- jQuery EasyUI 菜单与按钮 - 创建分割按钮(Split Button)
- jQuery EasyUI 布局
- jQuery EasyUI 布局 - 为网页创建边框布局
- jQuery EasyUI 布局 - 在面板中创建复杂布局
- jQuery EasyUI 布局 - 创建折叠面板
- jQuery EasyUI 布局 - 创建标签页(Tabs)
- jQuery EasyUI 布局 - 动态添加标签页(Tabs)
- jQuery EasyUI 布局 - 添加自动播放标签页(Tabs)
- jQuery EasyUI 布局 - 创建 XP 风格左侧面板
- jQuery EasyUI 数据网格
- jQuery EasyUI 数据网格 - 转换 HTML 表格为数据网格
- jQuery EasyUI 数据网格 - 取得选中行数据
- jQuery EasyUI 数据网格 - 添加查询功能
- jQuery EasyUI 数据网格 - 添加工具栏
- jQuery EasyUI 数据网格 - 创建复杂工具栏
- jQuery EasyUI 数据网格 - 设置冻结列
- jQuery EasyUI 数据网格 - 动态改变列
- jQuery EasyUI 数据网格 - 格式化列
- jQuery EasyUI 数据网格 - 设置排序
- jQuery EasyUI 数据网格 - 自定义排序
- jQuery EasyUI 数据网格 - 创建列组合
- jQuery EasyUI 数据网格 - 添加复选框
- jQuery EasyUI 数据网格 - 自定义分页
- jQuery EasyUI 数据网格 - 启用行内编辑
- jQuery EasyUI 数据网格 - 扩展编辑器
- jQuery EasyUI 数据网格 - 列运算
- jQuery EasyUI 数据网格 - 合并单元格
- jQuery EasyUI 数据网格 - 创建自定义视图
- jQuery EasyUI 数据网格 - 创建页脚摘要
- jQuery EasyUI 数据网格 - 条件设置行背景颜色
- jQuery EasyUI 数据网格 - 创建属性网格
- jQuery EasyUI 数据网格 - 扩展行显示细节
- jQuery EasyUI 数据网格 - 创建子网格
- jQuery EasyUI 数据网格 - 使用虚拟滚动视图显示海量数据
- jQuery EasyUI 数据网格 - 添加分页组件
- jQuery EasyUI 窗口
- jQuery EasyUI 窗口 - 创建简单窗口
- jQuery EasyUI 窗口 - 自定义窗口工具栏
- jQuery EasyUI 窗口 - 窗口与布局
- jQuery EasyUI 窗口 - 创建对话框
- jQuery EasyUI 窗口 - 自定义带有工具条和按钮的对话框
- jQuery EasyUI 树形菜单
- jQuery EasyUI 树形菜单 - 使用标记创建树形菜单
- jQuery EasyUI 树形菜单 - 创建异步树形菜单
- jQuery EasyUI 树形菜单 - 树形菜单添加节点
- jQuery EasyUI 树形菜单 - 创建带复选框的树形菜单
- jQuery EasyUI 树形菜单 - 树形菜单拖放控制
- jQuery EasyUI 树形菜单 - 树形菜单加载父/子节点
- jQuery EasyUI 树形菜单 - 创建基础树形网格
- jQuery EasyUI 树形菜单 - 创建复杂树形网格
- jQuery EasyUI 树形菜单 - 树形网格动态加载
- jQuery EasyUI 树形菜单 - 树形网格添加分页
- jQuery EasyUI 树形菜单 - 树形网格惰性加载节点
- jQuery EasyUI 表单
- jQuery EasyUI 表单 - 创建异步提交表单
- jQuery EasyUI 表单 - 表单验证
- jQuery EasyUI 表单 - 创建树形下拉框
- jQuery EasyUI 表单 - 格式化下拉框
- jQuery EasyUI 表单 - 过滤下拉数据网格
- jQuery EasyUI 插件
- jQuery EasyUI 扩展
- 免责声明