<input type="datetime-local">
åºçº¿
广æ³å¯ç¨
èª 2021å¹´10æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
datetime-local ç±»åç <input> å
ç´ åå»ºè®©ç¨æ·ä¾¿æ·è¾å
¥æ¥æåæ¶é´çè¾å
¥æ§ä»¶ï¼å
æ¬å¹´ãæãæ¥ï¼ä»¥åæ¶ãåã
å°è¯ä¸ä¸
<label for="meeting-time">éæ©é¢çº¦çæ¶é´ï¼</label>
<input
type="datetime-local"
id="meeting-time"
name="meeting-time"
value="2018-06-12T19:30"
min="2018-06-07T00:00"
max="2018-06-14T00:00" />
label {
display: block;
font:
1rem "Fira Sans",
sans-serif;
}
input,
label {
margin: 0.4rem 0;
}
该æ§ä»¶çç¨æ·çé¢éå¸¸å æµè§å¨èå¼ã宿¨å¨è¡¨ç¤ºæ¬å°æ¥æåæ¶é´ï¼èéä¸å®è¦ä»£è¡¨ç¨æ·çæ¬å°æ¥æåæ¶é´ãæ¢è¨ä¹ï¼è¯¥è¾å ¥å è®¸ä»»ä½ææçå¹´ãæãæ¥ãæ¶ãåç»åââå³ä¾¿è¯¥ç»åå¨ç¨æ·æ¬å°æ¶åºå å¯è½æ æï¼ä¾å¦å¤ä»¤æ¶æ¥å£è°æ´æ¶æ®µå çä¸å°æ¶è¿æ¸¡æï¼ã
å¼
ä¸ä¸ªè¾å ¥å°æ§ä»¶ä¸çè¡¨ç¤ºæ¥æçåç¬¦ä¸²ãæ¬å°æ¥ææ¶é´åç¬¦ä¸²ä¸æè¿°äºå ³äºæ¤ç±»åçè¾å ¥æ§ä»¶ä½¿ç¨çæ¥æåçè¾å ¥æ ¼å¼ã
ä½ å¯ä»¥å°ä¸ä¸ªå
嫿¥æåæ¶é´ç弿¾å¨ value 屿§ä¸ä»¥ä¸ºæ§ä»¶è®¾ç½®ä¸ä¸ªé»è®¤å¼ï¼åè¿æ ·ï¼
<label for="party">è¾å
¥æé¢å®èä¼çæ¥æåæ¶é´ï¼</label>
<input
id="party"
type="datetime-local"
name="party-date"
value="2017-06-01T08:30" />
éè¦æ³¨æçæ¯ï¼æ¾ç¤ºçæ¥æåæ¶é´çæ ¼å¼ä¸å®é
value ä¸çæ ¼å¼ä¸åï¼æ¾ç¤ºçæ¥æåæ¶é´æ ¼å¼ä»¥ç¨æ·æä½ç³»ç»æçåºå设置信æ¯ä¸ºåï¼èæ§ä»¶çæ¥æ/æ¶é´å¼ value æ»æ¯ yyyy-MM-ddTHH:mm æ ¼å¼ãä¾å¦ï¼å½ä¸ä¾ä¸çå¼æäº¤å°æå¡å¨ä¹åï¼å°ä¼åè¿æ · party-date=2017-06-01T08:30ã
夿³¨ï¼å¦å¤è¯·æ³¨æï¼å¦æè¿æ ·çæ°æ®ä»¥ HTTP GET æäº¤ï¼æ¶é´é¨åçåå·éè¦ç¼ç ä¹åæè½æ¾å¨ URL åæ°ä¸ï¼ä¾å¦ party-date=2017-06-01T08%3A30ãç¼ç æ¹æ³è¯·åè§ encodeURI()ã
ä½ ä¹å¯ä»¥å¨ JavaScript ä¸ä½¿ç¨ HTMLInputElement ç value 屿§æ¥è·ååè®¾ç½®æ¥æçå¼ï¼ä¾å¦ï¼
const dateControl = document.querySelector('input[type="datetime-local"]');
dateControl.value = "2017-06-01T08:30";
é¢å¤ç屿§
é¤äº <input> å
ç´ éç¨ç屿§å¤ï¼datetime-local è¾å
¥æ§ä»¶è¿æä¾äºä»¥ä¸å±æ§ã
max
æ¥åçæææ¥æåæ¶é´çå¼ã妿 value ç弿äºè¿ä¸æ¶é´æ³ï¼å该å
ç´ ä¸ä¼éè¿çº¦æéªè¯ã妿 max 屿§çå¼ä¸æ¯éµå¾ª YYYY-MM-DDTHH:mm æ ¼å¼çææå符串ï¼å该å
ç´ æ²¡ææå¤§å¼ã
该å¼å¿
é¡»æå®ä¸ä¸ªæ¥æå符串ï¼å
¶æ¥æå¿
é¡»æäºæçäºç± min 屿§æå®çæ¥æã
min
æ¥åçææ©æ¥æåæ¶é´çå¼ã妿æ©äºè¿ä¸æ¶é´æ³ï¼å该å
ç´ ä¸ä¼éè¿çº¦æéªè¯ã妿 min 屿§çå¼ä¸æ¯éµå¾ª YYYY-MM-DDThh:mm æ ¼å¼çææå符串ï¼å该å
ç´ æ²¡ææå°å¼ã
该å¼å¿
é¡»æå®ä¸ä¸ªæ¥æå符串ï¼å
¶æ¥æå¿
é¡»æ©äºæçäºç± max 屿§æå®çæ¥æã
step
step 屿§æ¯ä¸ä¸ªæ°åï¼ç¨äºæå®å¼å¿
é¡»éµå¾ªçæ¥é¿ç²¾åº¦ï¼æç¹æ®å¼ anyï¼è¯¦è§ä¸æè¯´æï¼ãä»
å½å¼ä¸æ¥é¿åºåå¼çå·®ä¸ºæ´æ°åæ¶æææãæ¥é¿åºåå¼ä¸ºï¼è¥å·²æå® minï¼å为æ¤å¼ï¼å¦å为 valueï¼è¥ä¸¤è
åæªæä¾å为 0ï¼Unix 纪å
æ¶é´ 1970-01-01T00:00ï¼ã
å¯¹äº datetime-local è¾å
¥ï¼step çå¼ä»¥ç§ä¸ºåä½ç»åºï¼å¹¶è¢«è§ä¸ºçäº step å¼ä¹ä»¥ 1000 çæ¯«ç§æ°ï¼åºå±æ°å¼åä½ä¸ºæ¯«ç§ï¼ãé»è®¤å¼ä¸º 60ï¼è¡¨ç¤º 1 åéã
åç¬¦ä¸²å¼ any è¡¨ç¤ºæ²¡ææ¥é¿çº¦æï¼æ¤æ¶ç¨æ·å¯ä»¥ä½¿ç¨ä»»ä½çå¼è¾å
¥ï¼é¤äºå
¶ä»ç约æï¼å¦ï¼min å maxï¼ãå®é
ä¸ï¼å¯¹äº datetime-local è¾å
¥ï¼å
¶ææçåäº 60ï¼å ä¸ºæ¤æ¶éæ©å¨çé¢ä»
å
è®¸éæ©æ´åéã
夿³¨ï¼å½ç¨æ·è¾å ¥çæ°æ®ä¸ç¬¦åé ç½®çæ¥é¿éå¶æ¶ï¼ç¨æ·ä»£çå¯è½ä¼å°å ¶åèäºå ¥å°æè¿çææå¼ï¼å½æä¸¤ä¸ªå·®å¼ç¸ççé项æ¶ï¼ä¼å 鿩大äºå½åå¼çæ°å¼ã
ä½¿ç¨ datetime-local è¾å ¥æ§ä»¶
æ¥æ/æ¶é´è¾å ¥å¯¹å¼åè èè¨åå便æ·ï¼å®ä»¬æä¾äºéæ©æ¥æåæ¶é´çç®æçé¢ï¼å¹¶è½å°åéè³æå¡å¨çæ°æ®æ ¼å¼æ ååï¼ä¸åç¨æ·åºå设置影åãç¶èï¼èèç¨æ·éæ±è³å ³éè¦ãåå¿è¦æ±ç¨æ·è¾å ¥åºç¨è¿è¡æ éçæ°æ®ã
æ§å¶è¾å ¥æ¡å¤§å°
<input type="datetime-local"> 䏿¯æè¡¨åæ§ä»¶ç大å°å±æ§ï¼ä¾å¦ sizeãéè¦åå© CSS æ¥èªå®ä¹è¿äºå
ç´ ç尺寸ã
设置æ¶åº
datetime-local æ§ä»¶å¹¶æ²¡æå°æ¹å¯ä»¥è®¾ç½®æ¥æ/æ¶é´çæ¶åºå/æåºå屿§ãå¨ datetime è¾å
¥ç±»å䏿ä¾è¿æ¤åè½ï¼ä½è¿ä¸ªç±»åç°å¨å·²è¢«åºå¼ï¼ä¹å·²ä»æ åä¸ç§»é¤ãè¿é¡¹è¢«ç§»é¤ç主è¦åå æ¯ç¼ºå°æµè§å¨çæ¯æï¼ä»¥ååºäºç¨æ·äº¤äº/ç¨æ·ä½éªæ¹æ³çèéãç¸æ¯ä¹ä¸ï¼ä»
使ç¨ä¸ä¸ªï¼æå¤ä¸ªï¼æ§ä»¶æ¥è®¾ç½®æ¥æ/æ¶é´ï¼ç¶ååç¬å¨å¦ä¸æ§ä»¶å¤çæ¶åºï¼è¿æ ·æ´å®¹æä¸äºã
ä¾å¦ï¼å¦æä½ æ£å¨æå»ºä¸ä¸ªç¨æ·å¾å¯è½å·²ç»å½ä¸åºå设置已é
ç½®çç³»ç»ï¼å¯éè¿ hidden è¾å
¥ç±»åæä¾æ¶åºã示ä¾å¦ä¸ï¼
<input type="hidden" id="timezone" name="timezone" value="-08:00" />
å¦ä¸æ¹é¢ï¼è¥éå
è®¸ç¨æ·å¨è¾å
¥æ¥æ/æ¶é´æ¶åæ¶éæ©æ¶åºï¼å¯ä½¿ç¨ <select> å
ç´ ï¼éè¿ä»é¢è®¾å°ç¹å表ä¸éæ©ç¹å®ä½ç½®ï¼ä½¿ç¨æ·è½å¤è®¾ç½®æ£ç¡®çæ¶åºï¼
<select name="timezone" id="timezone">
<option value="Pacific/Kwajalein">å尼卿å
ï¼å¤¸è´¾æ</option>
<option value="Pacific/Midway">ä¸éå²ï¼è¨æ©äº</option>
<option value="Pacific/Honolulu">å¤å¨å¤·</option>
<option value="Pacific/Marquesas">泰奥海</option>
<!-- çç -->
</select>
以ä¸ä¸¤ä¾ä¸ï¼æ¥æ/æ¶é´åæ¶åºå¯ä»¥ç¬ç«çæ°æ®æäº¤å°æå¡å¨ï¼ä¹åä½ éè¦åçå°±æ¯æå®ä»¬ä¿åå°æå¡å¨æ°æ®åºæ°å½çä½ç½®ã
æ ¡éª
é»è®¤æ
åµä¸ <input type="datetime-local"> ä¸å¯¹è¾å
¥å
容è¿è¡éªè¯ãç¨æ·äº¤äºï¼UIï¼çå®ç°é常ä¸å
è®¸ä½ è¾å
¥ä¸æ¯æ¥æ/æ¶é´çå¼ââè¿é常æç¨ãä½ç¨æ·ä¹ä»ä¼å¨ä¸å¡«åä»»ä½å¼çæ
åµä¸æäº¤æ°æ®ï¼æè
è¾å
¥ä¸ä¸ªæ æçæ¥æ/æ¶é´ï¼å¦ï¼4 æ 32 æ¥ï¼ã
ä½ å¯ä»¥ä½¿ç¨ min å max æ¥éå¶å¯éæ©çæ¥æï¼åè§è®¾å®æ¥ææ¶é´çæå¤§å¼åæå°å¼ï¼ï¼å¹¶ä¸ä½¿ç¨ required 屿§ä½¿æ¥æ/æ¶é´ä¸ºå¼ºå¶çè¾å
¥é¡¹ãè¿æ ·åçç»ææ¯ï¼å¯ä»¥ä½¿ç¸åºçæµè§å¨å¨ä½ è¾å
¥ä¸ä¸ªè¶
åºèå´çæ¥ææä¸è¾å
¥æ¶æ¾ç¤ºä¸ä¸ªé误信æ¯ã
让æä»¬æ¥ç个ä¾åï¼è¿éæä»¬è®¾ç½®æ¥æ/æ¶é´çæå°å¼åæå¤§å¼ï¼å¹¶ä¸è®¾ç½®è¯¥é¡¹ä¸ºå¿ å¡«ï¼
<form>
<div>
<label for="party">
è¯·éæ©åå¥½çæ´¾å¯¹æ¥æåæ¶é´ï¼å¿
填项ï¼6 æ 1 æ¥ä¸å 8:30 è³ 6 æ 30 æ¥ä¸å 4:30ï¼ï¼
</label>
<input
id="party"
type="datetime-local"
name="party-date"
min="2017-06-01T08:30"
max="2017-06-30T16:30"
required />
<span class="validity"></span>
</div>
<div>
<input type="submit" value="é¢å®èä¼ï¼" />
</div>
</form>
å¦æä½ è¯å¾æäº¤ä¸ä¸ªä¸å®æ´çæ¥æï¼æè æ¥æè¶ åºè®¾å®èå´ï¼ï¼æµè§å¨ä¼æ¾ç¤ºä¸æ¡é误信æ¯ãæ¥è¯è¯è¿ä¸ªç¤ºä¾ï¼
è¿éæä»¥ä¸ç¤ºä¾ç CSSãå¨è¿éæä»¬å©ç¨ :valid å :invalid CSS 屿§ï¼æ ¹æ®å½å弿¯å¦æææ¥è®¾ç½®è¾å
¥æ¡æ ·å¼ã徿 被æ¾ç½®å¨è¾å
¥æ¡æè¾¹ç <span> æ ç¾ä¸ã
div {
margin-bottom: 10px;
display: flex;
align-items: center;
}
label {
display: inline-block;
width: 300px;
}
input:invalid + span:after {
content: "â";
padding-left: 5px;
}
input:valid + span:after {
content: "â";
padding-left: 5px;
}
è¦åï¼HTML 表åéªè¯å¹¶ä¸è½åä»£èæ¬æ ¡éªè¾å ¥æ°æ®æ¯å¦ç¬¦åæ ¼å¼è¦æ±ãç¨æ·å¯ä»¥é常容æå°ä¿®æ¹ HTML 以ç»è¿éªè¯ï¼äº¦ææ¯å®å ¨å é¤è¿ä¸ªå ç´ ãåæ ·å¯è½çæ¯ï¼ç¨æ·ä¹å¯ä»¥é常轻æåå°å®å ¨ç»è¿ HTML èç´æ¥åä½ çæå¡å¨æäº¤æ°æ®ãå¦æä½ æå¡å¨ä»£ç ä¸å¯¹æ¥æ¶å°çæ°æ®è¿è¡æ ¡éªï¼å¨è¿äºéè¯¯æ ¼å¼æ°æ®æäº¤çæ¶åå°±å¯è½ä¼äº§çç¾é¾æ§é®é¢ï¼æ°æ®å¤ªå¤§ãæ ¼å¼é误çï¼ã
夿³¨ï¼éè¿ä½¿ç¨ datetime-local è¾å
¥ï¼æ¥æå¼æ»æ¯è¢«æ åå为 YYYY-MM-DDTHH:mm å½¢å¼ã
示ä¾
>datetime-local çåºæ¬ç¨æ³
<input type="datetime-local"> çæåºæ¬ç¨æ³æ¶åä¸ä¸ªåºç¡ç <input> å
ç´ ä¸ <label> å
ç´ çç»åï¼å¦ä¸æç¤ºï¼
<form>
<label for="party">è¾å
¥æé¢å®èä¼çæ¥æåæ¶é´ï¼</label>
<input id="party" type="datetime-local" name="party-date" />
</form>
è®¾ç½®æ¥æåæ¶é´çæå¤§å¼åæå°å¼
å¯ä»¥ä½¿ç¨ min å max 屿§æ¥éå¶ç¨æ·å¯éæ©çæ¥æ/æ¶é´èå´ãå¨ä¸é¢ç示ä¾ä¸ï¼æä»¬å°æå°æ¥ææ¶é´è®¾ç½®ä¸º 2025-06-01T08:30ï¼æå¤§æ¥ææ¶é´è®¾ç½®ä¸º 2025-06-30T16:30ï¼
<form>
<label for="party">è¾å
¥æé¢å®èä¼çæ¥æåæ¶é´ï¼</label>
<input
id="party"
type="datetime-local"
name="party-date"
min="2025-06-01T08:30"
max="2025-06-30T16:30" />
</form>
以ä¸ç¤ºä¾å°ä»
å¯éæ© 2025 å¹´ 6 æçæ¥æãæ ¹æ®ä½¿ç¨çæµè§å¨ä¸åï¼è¶
åºæå®èå´çæ¶é´å¯è½æ æ³éæ©ãå¨å
¶ä»æµè§å¨ä¸ï¼æ ææ¥æåæ¶é´è½å¯éæ©ï¼ä½å°å¹é
:invalid å :out-of-range æ ·å¼ï¼å¹¶å¯¼è´æ ¡éªå¤±è´¥ã
é¨åæµè§å¨ï¼Chrome å Edgeï¼ä» å 许ç¼è¾æ¥æå¼ä¸çâæ¥æâé¨åï¼ä¸æ æ³æ»å¨éæ©å æä»¥å¤çæ¥æãå ¶ä»æµè§å¨ï¼Safariï¼è½æ¾ç¤ºæ¥æéæ©å¨å è®¸ä»»ææ¥æï¼ä½é宿¥ææ¶å¼å°èªå¨éå¶å¨ææèå´å ã
ææèå´æ¶µç min ä¸ max å¼ä¹é´çæææ¶é´æ®µï¼ä»
å¨èå´é¦å°¾æ¥æå¤å¯¹æ¶é´æ®µè¿è¡éå¶ã
夿³¨ï¼ä½ åºè¯¥è½å¤ä½¿ç¨ step 屿§æ¥è°æ´æ¯æ¬¡æ¥æé墿¶è·³è·ç天æ°ï¼ä¾å¦ï¼è®©ç¨æ·åªå¯ä»¥éæ©ææå
ï¼ãç¶èï¼æªè³æ¬ææ°å乿¶ï¼è¯¥å±æ§å¨ä»»ä½å®ç°ä¸ä¼¼ä¹é½æªè½ææåæ¥ä½ç¨ã
ææ¯æ¦è¦
| å¼ | ä¸ä¸ªè¡¨ç¤ºæ¥æåæ¶é´çåç¬¦ä¸²ï¼æ¬å°æ¶åºï¼æç©ºå¼ã |
| äºä»¶ |
change å
input
|
| æ¯æçéç¨å±æ§ |
autocompleteãlistãreadonly
å step
|
| IDL 屿§ |
listãvalueãvalueAsNumberã
|
| DOM æ¥å£ | HTMLInputElement |
| æ¹æ³ |
select()ãstepDown()ãstepUp()
|
| éå¼ ARIA è§è² | 没æç¸åºçè§è² |
è§è
| è§è |
|---|
| HTML> # local-date-and-time-state-(type=datetime-local)> |
æµè§å¨å ¼å®¹æ§
åè§
- éç¨
<input>å ç´ ä»¥åæä½å®çæ¥å£HTMLInputElement <input type="date">å<input type="time">- HTML ä¸çæ¥æä¸æ¶é´æ ¼å¼
- æ¥æåæ¶é´éæ©å¨æç¨