Π΄Π»Ρ ΠΊΠ°ΠΊΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ input type date
ΠΠ»Ρ ΠΊΠ°ΠΊΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ input type date
elements of type=»date» create input fields that let the user enter a date, either with a textbox that validates the input or a special date picker interface.
The resulting value includes the year, month, and day, but not the time. The time and datetime-local input types support time and date+time input.
Value
A DOMString representing the date entered in the input. The date is formatted according to ISO8601, described in Format of a valid date string in Date and time formats used in HTML.
You can set a default value for the input with a date inside the value attribute, like so:
You can get and set the date value in JavaScript with the HTMLInputElement value and valueAsNumber properties. For example:
Additional attributes
Along with the attributes common to all elements, date inputs have the following attributes.
If both the max and min attributes are set, this value must be a date string later than or equal to the one in the min attribute.
If both the max and min attributes are set, this value must be a date string earlier than or equal to the one in the max attribute.
A string value of any means that no stepping is implied, and any value is allowed (barring other constraints, such as min and max ).
Note: When the data entered by the user doesn’t adhere to the stepping configuration, the user agent may round to the nearest valid value, preferring numbers in the positive direction when there are two equally close options.
For date inputs, the value of step is given in days; and is treated as a number of milliseconds equal to 86,400,000 times the step value (the underlying numeric value is in milliseconds). The default value of step is 1, indicating 1 day.
Note: Specifying any as the value for step has the same effect as 1 for date inputs.
Using date inputs
Date inputs sound convenient β they provide an easy interface for choosing dates, and they normalize the data format sent to the server regardless of the user’s locale. However, there are currently issues with because of its limited browser support.
Note: Hopefully, over time browser support will become ubiquitous, and this problem will fade away.
Basic uses of date
Setting maximum and minimum dates
You can use the min and max attributes to restrict the dates that can be chosen by the user. In the following example, we set a minimum date of 2017-04-01 and a maximum date of 2017-04-30 :
The result is that only days in April 2017 can be selected β the month and year parts of the textbox will be uneditable, and dates outside April 2017 can’t be selected in the picker widget.
Note: You should be able to use the step attribute to vary the number of days jumped each time the date is incremented (e.g. to only make Saturdays selectable). However, this does not seem to be in any implementation at the time of writing.
Controlling input size
Validation
By default, doesn’t validate the entered value beyond its format. The interfaces generally don’t let you enter anything that isn’t a date β which is helpful β but you can leave the field empty or enter an invalid date in browsers where the input falls back to type text (like the 32nd of April).
If you use min and max to restrict the available dates (see Setting maximum and minimum dates), supporting browsers will display an error if you try to submit a date that is out of bounds. However, you’ll need to double-check the submitted results to ensure the value is within these dates, if the date picker isn’t fully supported on the user’s device.
You can also use the required attribute to make filling in the date mandatory β an error will be displayed if you try to submit an empty date field. This should work in most browsers, even if they fall back to a text input.
Let’s look at an example of minimum and maximum dates, and also made a field required:
If you try to submit the form with an incomplete date (or with a date outside the set bounds), the browser displays an error. Try playing with the example now:
Here’s the CSS used in the above example. We make use of the :valid and :invalid pseudo-elements to add an icon next to the input, based on whether or not the current value is valid. We had to put the icon on a next to the input, not on the input itself, because in Chrome at least the input’s generated content is placed inside the form control, and can’t be styled or shown effectively.
Warning: Client-side form validation is no substitute for validating on the server. It’s easy for someone to modify the HTML, or bypass your HTML entirely and submit the data directly to your server. If your server fails to validate the received data, disaster could strike with data that is badly-formatted, too large, of the wrong type, etc.
Handling browser support
As mentioned, the major problem with date inputs is browser support.
Unsupporting browsers gracefully degrade to a text input, but this creates problems in consistency of user interface (the presented controls are different) and data handling.
One way around this is the pattern attribute on your date input. Even though the date picker doesn’t use it, the text input fallback will. For example, try viewing the following in a unsupporting browser:
If you submit it, you’ll see that the browser displays an error and highlights the input as invalid if your entry doesn’t match the pattern ####-##-## (where # is a digit from 0 to 9). Of course, this doesn’t stop people from entering invalid dates, or incorrect formats. So we still have a problem.
At the moment, the best way to deal with dates in forms in a cross-browser way is to have the user enter the day, month, and year in separate controls, or to use a JavaScript library such as jQuery date picker.
Examples
In this example, we create 2 sets of UI elements for choosing dates: a native picker and a set of 3 elements for older browsers that don’t support the native date input.
The HTML looks like so:
The months are hardcoded (as they are always the same), while the day and year values are dynamically generated depending on the currently selected month and year, and the current year (see the code comments below for detailed explanations of how these functions work.)
JavaScript
Note: Remember that some years have 53 weeks in them (see Weeks per year)! You’ll need to take this into consideration when developing production apps.
ΠΠ»Ρ ΠΊΠ°ΠΊΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ input type date
ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΈΠΏΠ° date ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅ΡΡΠΈ Π΄Π°ΡΡ, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ text box Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ date picker. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π³ΠΎΠ΄, ΠΌΠ΅ΡΡΡ, Π΄Π΅Π½Ρ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅ΠΌΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π° time (en-US) ΠΈΠ»ΠΈ datetime-local, ΡΡΠΎΠ±Ρ Π²Π²ΠΎΠ΄ΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ Π΄Π°ΡΡ+Π²ΡΠ΅ΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ GitHub. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²Π½Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ Π² ΠΏΡΠΎΠ΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΊΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ https://github.com/mdn/interactive-examples ΠΈ ΠΎΡΠΏΡΠ°Π²ΡΡΠ΅ Π½Π°ΠΌ Π·Π°ΠΏΡΠΎΡ Π½Π° Π²Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Π‘ΡΠ΅Π΄ΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π΄Π°ΡΡ, Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² Chrome ΠΈ Opera, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π Edge ΠΎΠ½ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π Π² Firefox Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°ΡΡ Π² JavaScript Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ² value ΠΈ valueAsNumber ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° input. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ
ΠΡΡΠΈΠ±ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|
max | ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°Ρ Π΄Π°ΡΠ° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ |
min | ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°Ρ Π΄Π°ΡΠ° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ |
step | Π¨Π°Π³ (Π² Π΄Π½ΡΡ ), Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π°ΡΠ° ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π²Π½ΠΈΠ· ΠΈΠ»ΠΈ Π²Π²Π΅ΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° |
Π‘ΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ any ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π³Π° Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ ΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ min ΠΈ max ).
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²Π²Π΅Π΄ΡΠ½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ΄ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π³Π°, user agent ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΡΡΠ³Π»ΠΈΡΡ Π΅Π³ΠΎ Π΄ΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ Π² Π±ΠΎΠ»ΡΡΡΡ ΡΡΠΎΡΠΎΠ½Ρ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ²Π½ΠΎ ΠΏΠΎΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΡΠ°Π³Π°.
ΠΠ»Ρ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° date Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ step Π·Π°Π΄Π°ΡΡΡΡ Π² Π΄Π½ΡΡ ; ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄, ΡΠ°Π²Π½ΠΎΠ΅ 86 400 000 ΡΠΌΠ½ΠΎΠΆΠΈΡΡ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ step (ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ ). Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ step ΡΠ°Π²Π½ΠΎ 1, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ 1 Π΄Π΅Π½Ρ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° c ΡΠΈΠΏΠΎΠΌ date
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π·Π°ΠΌΠ°Π½ΡΠΈΠ²ΠΎ β ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π»ΡΠ³ΠΊΠΈΠΉ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π΄Π°ΡΡ, Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠΎΡΠΌΠ°Ρ Π΄Π°ΡΡ, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΉ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π² ΡΠ²ΡΠ·ΠΈ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ².
ΠΠ°Π΄Π΅Π΅ΠΌΡΡ, ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌΠΈ ΡΡΠ°Π½Π΅Ρ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎΠΉ, ΠΈ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΡΡΠ΅Π·Π½Π΅Ρ.
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ date?
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π°ΡΡ
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ Π΄Π΅Π½Ρ Π°ΠΏΡΠ΅Π»Ρ 2017 Π³ΠΎΠ΄Π°, Π½ΠΎ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΄Π½ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅ΡΡΡΠ΅Π² ΠΈ Π³ΠΎΠ΄ΠΎΠ², Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΡΠ΅ΡΠ΅Π· Π²ΠΈΠ΄ΠΆΠ΅Ρ date picker.
Controlling input size
Validation
By default, does not apply any validation to entered values. The UI implementations generally don’t let you enter anything that isn’t a date β which is helpful β but you can still leave the field empty or (in browsers where the input falls back to type text ) enter an invalid date (e.g. the 32nd of April).
If you use min and max to restrict the available dates (see Setting maximum and minimum dates), supporting browsers will display an error if you try to submit a date that is outside the set bounds. However, you’ll have to check the results to be sure the value is within these dates, since they’re only enforced if the date picker is fully supported on the user’s device.
In addition, you can use the required attribute to make filling in the date mandatory β again, an error will be displayed if you try to submit an empty date field. This, at least, should work in most browsers.
Let’s look at an example β here we’ve set minimum and maximum dates, and also made the field required:
If you try to submit the form with an incomplete date (or with a date outside the set bounds), the browser displays an error. Try playing with the example now:
Here’s a screenshot for those of you who aren’t using a supporting browser:
Here’s the CSS used in the above example. Here we make use of the :valid and :invalid CSS properties to style the input based on whether or not the current value is valid. We had to put the icons on a next to the input, not on the input itself, because in Chrome the generated content is placed inside the form control, and can’t be styled or shown effectively.
Important: HTML form validation is not a substitute for scripts that ensure that the entered data is in the proper format. It’s far too easy for someone to make adjustments to the HTML that allow them to bypass the validation, or to remove it entirely. It’s also possible for someone to simply bypass your HTML entirely and submit the data directly to your server. If your server-side code fails to validate the data it receives, disaster could strike when improperly-formatted data is submitted (or data which is too large, is of the wrong type, and so forth).
Handling browser support
As mentioned above, the major problem with using date inputs at the time of writing is browser support. As an example, the date picker on Firefox for Android looks like this:
Non-supporting browsers gracefully degrade to a text input, but this creates problems both in terms of consistency of user interface (the presented control will be different), and data handling.
One way around this is to put a pattern attribute on your date input. Even though the date input doesn’t use it, the text input fallback will. For example, try viewing the following example in a non-supporting browser:
The best way to deal with dates in forms in a cross-browser way at the moment is to get the user to enter the day, month, and year in separate controls ( elements being popular; see below for an implementation), or to use a JavaScript library such as jQuery date picker.
Examples
In this example we create two sets of UI elements for choosing dates: a native picker and a set of three elements for choosing dates in older browsers that don’t support the native input.
The HTML looks like so:
The months are hardcoded (as they are always the same), while the day and year values are dynamically generated depending on the currently selected month and year, and the current year (see the code comments below for detailed explanations of how these functions work.)
JavaScript
Note: Remember that some years have 53 weeks in them (see Weeks per year)! You’ll need to take this into consideration when developing production apps.
ΠΠ»Ρ ΠΊΠ°ΠΊΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ input type date
ΠΡΠΎ ΠΏΠΎΠ»Π΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ²Π΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΡΠΈΠ±ΡΡ value ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ.
ΠΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π΄Π°ΡΡ
ΠΠΎΠ»Π΅ ΡΠΈΠΏΠ° date ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π²Π΅ΡΡΠΈ Π΄Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΡ.
ΠΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π½ΠΈΠΆΠ½ΡΡ ΠΈ Π²Π΅ΡΡ Π½ΡΡ Π³ΡΠ°Π½ΠΈΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π΄Π°Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ min ΠΈ max.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π°Π΄ΡΠ΅ΡΠ° ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ
ΠΠ»Ρ Π²Π²ΠΎΠ΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡ multiple, ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄Π»Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠ°Ρ (,)
ΠΡΠΈΠΌΠ΅Ρ
Π€Π°ΠΉΠ» FILE
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡ Π»ΡΠ±ΠΎΠΉ ΡΠ°ΠΉΠ». ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π° Π² Π±Π°ΠΉΡΠ°Ρ Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠΊΡΡΡΡΠΌ ΠΏΠΎΠ»Π΅ΠΌ max_file_size.
ΠΡΠΈΠΌΠ΅Ρ
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Π½Π° PHP:
ΠΡΠ°ΡΠ·Π΅Ρ Chrome ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ «webkitdirectory directory«, ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ Ρ input ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ΅Π»ΡΠ΅ ΠΏΠ°ΠΏΠΊΠΈ:
Π‘ΠΊΡΡΡΠΎΠ΅ ΠΏΠΎΠ»Π΅ HIDDEN
ΠΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ (ΡΠΊΡΡΡΡΠΉ) ΡΠΈΠΏ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ. ΠΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΡΡ ΡΠΎΡΠΌ, ΡΠΎ Π² ΡΠΊΡΡΡΠΎΠΌ ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Ρ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΎΡΠΌΠΎΠΉ Π²Ρ ΠΈΠΌΠ΅Π΅ΡΠ΅ Π΄Π΅Π»ΠΎ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΠ°ΡΠ·Π΅Ρ Π½Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΊΡΡΡΠΎΠ΅ ΠΏΠΎΠ»Π΅, Ρ ΠΎΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π±ΡΠΎΡΠ·Π΅Ρ Π² ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° HTML-ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡ Web-ΡΡΡΠ°Π½ΠΈΡΡ. Π‘ΠΊΡΡΡΡΠ΅ ΠΏΠΎΠ»Ρ ΠΏΠΎΠ»Π΅Π·Π½Ρ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ Π΄Π»Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠΌΠ΅Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π½ΠΎΡΠΈΡΡ Π² Π½Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΠΈΡΠ΅, ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π²Π°ΡΡ ΡΠΎΡΠΌΡ Π² ΡΠ°ΠΉΠ»Π΅, ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΡ ΡΠΎΡΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΠΎΡΡΠΎΠΌΡ Π½Π΅ ΡΡΠΎΠΈΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΠΊΡΡΡΡΠ΅ ΠΏΠΎΠ»Ρ Ρ ΡΠ΅Π»ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π·Π°ΡΠΈΡΡ.
ΠΡΠΈΠΌΠ΅Ρ
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ FormVersion, ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 1.2. ΠΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΎΡ ΡΠΎΡΠΌΡ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΡΠΈΡΠ΅Π» NUMBER
ΠΠΎΠ»Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΠΈΡΠ΅Π». ΠΡΠΎΠ±Π½Π°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΎΡΠΊΠΎΠΉ (2.5), ΡΠ°ΠΊ ΠΈ Π·Π°ΠΏΡΡΠΎΠΉ (2,5). ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅Π΄Π΅Ρ Π±ΡΠΊΠ²Ρ, ΡΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΡΠΌΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ ΠΈ ΡΠ°Π³ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΡΠ»Π°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π³Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π»ΡΠΌ, ΡΠ°ΠΊ ΠΈ Π΄ΡΠΎΠ±Π½ΡΠΌ, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ 0. ΠΡΠ»ΠΈ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π² ΠΏΠΎΠ»Π΅ ΡΠΈΡΠ»ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌ, ΡΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° Π½Π° ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠ»Ρ Π·Π°Π΄Π°Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ°Π³Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ step=»any».
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠ»Π΅ number ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ: Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΡΡΠ΅Π»ΠΎΡΠΊΠΈ Π²ΡΠ΅Π³Π΄Π°, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ β ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΌ ΡΠΎΠΊΡΡΠ°.
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΡΠ΅Π»ΠΎΡΠΊΠΈ Π² ΠΏΠΎΠ»Π΅ number Π±ΡΠ»ΠΈ Π²ΡΠ΅Π³Π΄Π°, Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΡΠΈΠ»Ρ:
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΡΡΡΠ΅Π»ΠΎΡΠΊΠΈ Π² ΠΏΠΎΠ»Π΅ number, Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΡΠΈΠ»Ρ:
ΠΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΏΠ°ΡΠΎΠ»Ρ PASSWORD
ΠΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΏΠ°ΡΠΎΠ»Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅. ΠΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ½ΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² Π½Π΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΡΠΎΡΠΊΠΈ. Π’Π°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½Π°, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠΈΠΏΠ° ΠΏΠ°ΡΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΈΠ΄Π΅ΡΡ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ RADIO
ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΡΠ»Π°ΠΆΠΎΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π²ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
ΠΠΎ ΡΠΌΡΡΠ»Ρ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π² ΡΠΎΡΠΌΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ name. Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° value. ΠΡΡΠΏΠΏΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² ΡΠΎΡΠΌΠ΅ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ. ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ.
ΠΠ΄ΠΈΠ½ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ ΠΈΠ· Π³ΡΡΠΏΠΏΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π²ΡΠ±ΡΠ°Π½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠ° checked.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠ»Π·ΡΠ½ΠΎΠΊ RANGE
ΠΠΎΠ»Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΎ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΠΈΡΠ»Π° Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅.
ΠΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 0), ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 100), ΡΠ°Π³ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΡΠ»Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 1) ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ).
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠ»Π·ΡΠ½ΠΎΠΊ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ½ Π²ΡΠ±ΡΠ°Π». ΠΠΎΡΡΠΎΠΌΡ Π·Π΄Π΅ΡΡ Π±Π΅Π· JavaScript Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠ»Π΅ range ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°ΠΌΠΈ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ.
ΠΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ²ΠΎΡ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅, Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΡΠΈΠ»ΠΈ Π΄Π»Ρ ΠΏΠΎΠ»Π·ΡΠ½ΠΊΠ°:
ΠΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΠΈΠ»ΠΈ IE11 Π½Π΅ ΡΠ΄Π°ΡΡΡΡ!
ΠΠ½ΠΎΠΏΠΊΠ° RESET
ΠΡΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΎΡΠΈΡΡΠΊΠΈ ΡΠΎΡΠΌΡ. ΠΡΠΈ Π΅Π΅ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π²ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΠ½Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½Π°.
Π‘ΠΎΠ²Π΅Ρ: ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅ΡΡ ΠΊ Π²ΡΠ±ΠΎΡΡ Π½Π°Π΄ΠΏΠΈΡΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ RESET. ΠΠΏΠΎΠ»Π½Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΡΠΌ (ΠΈ, Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΉΠ½ΠΈΠΊΡ ΠΈΠ· ΡΠ°ΠΉΠ½ΠΈΠΊΠΎΠ²) Π±ΡΠ΄Π΅Ρ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π²ΡΠΎΠ΄Π΅ Β«ΠΡΠΈΡΡΠΈΡΡΒ», Β«ΠΠ°ΡΠ°ΡΡ ΡΠ½Π°ΡΠ°Π»Π°Β», Β«Π£Π΄Π°Π»ΠΈΡΡ Π²Π²ΠΎΠ΄Β» ΠΈ Ρ.ΠΏ. Π ΠΎΠ±ΡΠ΅ΠΌ, Π½Π°Π΄ΠΎ, ΡΡΠΎΠ±Ρ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π·Π°ΠΊΡΠ°Π»ΠΎΡΡ ΠΈ ΡΠ΅Π½ΠΈ ΡΠΎΠΌΠ½Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠ½ΠΎΠΏΠΊΠ° SUBMIT
ΠΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΡΠΌΡ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² Π²Π½Π΅ΡΠ½Π΅ ΠΏΠΎΡΡΠΈ Π½Π΅ ΠΎΡΠ»ΠΈΡΠΈΠΌΠ° ΠΎΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ BUTTON. Π‘Π°ΠΌΠ° ΠΎΠ½Π° Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ, Π° ΡΠ»ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΡΡΠΈΠ±ΡΡ onclick Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ SUBMIT ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ onsubmit, Π·Π°Π΄Π°Π½Π½ΡΠΉ Π² ΡΠ΅Π³Π΅
ΠΡΡΠΈΠ±ΡΡ value Π΄Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ . Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΡΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π°Π»Π΅Π΅.
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΡΠΈΠ±ΡΡ formnovalidate ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΎΡΠΌΡ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° TEXT
Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠΎΡΠΌΠ°Ρ
Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ ΠΏΡΠ°Π²Ρ ΡΡΠΈΡΠ°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΈ Π³Π»Π°Π²Π½Π΅ΠΉΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΎΡΠΌ. ΠΡΠΎΡ ΡΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π³ΠΎΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π·Π°Π΄Π°ΡΡ ΡΡΠΈΠ»Ρ Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ° input[type=»text»], ΡΠΎ ΡΠΎΠ³Π΄Π° Π°ΡΡΠΈΠ±ΡΡ type=»text» ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡ Π½Π΅Π»ΡΠ·Ρ.
ΠΠΌΡ ΠΏΠΎΠ»Ρ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ name, Π²ΡΠ΅Π³Π΄Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π±Π°Π·ΠΈΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅, Π±ΡΠ°ΡΠ·Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΏΠ°ΡΡ ΠΈΠΌΡ=Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΈΠΌΠ΅Ρ
Π’Π΅ΠΊΡΡ Β«ΠΠ²Π°Π½ΠΎΠ²Β» ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π²Π½Π΅ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ RESET, ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΠ²Π°Π½ΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠ»Ρ ΠΊΠ°ΠΊΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ input type date
ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° datetime-local ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ Π»Π΅Π³ΠΊΠΎ Π²Π²Π΅ΡΡΠΈ Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΡ β Π³ΠΎΠ΄, ΠΌΠ΅ΡΡΡ, Π΄Π΅Π½Ρ, ΡΠ°ΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ.
ΠΠ»Ρ ΡΠ΅Ρ ΠΈΠ· Π²Π°Ρ, ΠΊΡΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ Π±ΡΠ°ΡΠ·Π΅Ρ, Chrome/Opera datetime-local control Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΡΠΊΡΠΈΠ½ΡΠΎΡ Π½ΠΈΠΆΠ΅. ΠΠ°ΠΆΠ°ΡΠΈΠ΅ Π½Π° ΡΡΡΠ΅Π»ΠΊΡ Π²Π½ΠΈΠ· Ρ ΠΏΡΠ°Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π²ΡΠ±ΠΎΡΡ Π΄Π°ΡΡ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π²ΡΠ±ΡΠ°ΡΡ Π΄Π°ΡΡ; Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Π²Π΅ΡΡΠΈ Π²ΡΠ΅ΠΌΡ Π²ΡΡΡΠ½ΡΡ.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅
DOMString ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π°ΡΡ, Π²Π²Π΅Π΄ΡΠ½Π½ΠΎΠΉ Π²ΠΎ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π°, Π²ΠΊΠ»ΡΡΠ°Ρ Π΄Π°ΡΡ Π²Π½ΡΡΡΠΈ value Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΊΠ°ΠΊ:
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π°ΡΡ Π² JavaScript, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ HTMLInputElement.value ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ datetime
ΠΠ²ΠΎΠ΄ Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ β ΠΎΠ½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΈ ΠΎΠ½ΠΈ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΡΡ ΡΠΎΡΠΌΠ°Ρ Π΄Π°Π½Π½ΡΡ , ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π»ΠΎΠΊΠ°Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΈΠ·-Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
ΠΠ°Π·ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° datetime
Π‘Π°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅:
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ° ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ min ΠΈ max Π°ΡΡΠΈΠ±ΡΡΡ ΡΡΠΎΠ±Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π΄Π°ΡΡ/Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΡ Π² 2017-06-01T08:30 ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π² 2017-06-30T16:30 :
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ step Π°ΡΡΠΈΠ±ΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π½Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΏΡΡΠ΅Π½Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π΄Π°ΡΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΡΠΎΠ»ΡΠΊΠΎ Π‘ΡΠ±Π±ΠΎΡΡ). ΠΠ΄Π½Π°ΠΊΠΎ, Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΡΡΠΎ Π½Π΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
Controlling input size
Setting timezones
One thing the datetime-local input type doesn’t provide is a way to set the timezone/locale of the datetime. This was available in the datetime input type, but this type is now obsolete, having been removed from the spec. The main reasons why this was removed are a lack of implementation in browsers, and concerns over the user interface/experience. It is easier to just have a control (or controls) for setting the date/time and then deal with the locale in a separate control.
For example, if you are creating a system where the user is likely to already be logged in, with their locale already set, you could provide the timezone in a hidden input type. For example:
On the other hand, if you were required to allow the user to enter a timezone along with a datetime entry, you could provide a means of inputting a timezone, such as a element:
In either case, the timedate and timezone values would be submitted to the server as separate data points, and then you’d need to store them appropriately in the database on the server-side.
Note: The above code snippet is taken from All world timezones in an HTML select element.
Validation
By default, does not apply any validation to entered values. The UI implementations generally don’t let you enter anything that isn’t a datetime β which is helpful β but you can still fill in no value and submit, or enter an invalid datetime (e.g. the 32th of April).
You can use min and max to restrict the available dates (see anch(«Setting maximum and minimum dates»)), and in addition use the required attribute to make filling in the date mandatory. As a result, supporting browsers will display an error if you try to submit a date that is outside the set bounds, or an empty date field.
Let’s look at an example β here we’ve set minimum and maximum datetimes, and also made the field required:
If you try to submit the form with an incomplete date (or with a date outside the set bounds), the browser displays an error. Try playing with the example now:
Here’s’a screenshot for those of you who aren’t using a supporting browser:
Here’s the CSS used in the above example. Here we make use of the :valid and :invalid CSS properties to style the input based on whether or not the current value is valid. We had to put the icons on a next to the input, not on the input itself, because in Chrome the generated content is placed inside the form control, and can’t be styled or shown effectively.
Important: HTML form validation is not a substitute for scripts that ensure that the entered data is in the proper format. It’s far too easy for someone to make adjustments to the HTML that allow them to bypass the validation, or to remove it entirely. It’s also possible for someone to simply bypass your HTML entirely and submit the data directly to your server. If your server-side code fails to validate the data it receives, disaster could strike when improperly-formatted data is submitted (or data which is too large, is of the wrong type, and so forth).
Handling browser support
As mentioned above, the major problem with using date inputs at the time of writing is browser support β only Chrome/Opera and Edge support it on desktop, and most modern browsers on mobile. As an example, the datetime-local picker on Firefox for Android looks like this:
Non-supporting browsers gracefully degrade to a text input, but this creates problems both in terms of consistency of user interface (the presented control will be different), and data handling.
One way around this is to put a pattern attribute on your datetime-local input. Even though the datetime-local input doesn’t use it, the text input fallback will. For example, try viewing the following demo in a non-supporting browser:
And what user is going to understand the pattern they need to enter the time and date in?
We still have a problem.
The best way to deal with dates in forms in a cross-browser way at the moment is to get the user to enter the day, month, year, and time in separate controls ( elements being popular β see below for an implementation), or use JavaScript libraries such as jQuery date picker, and the jQuery timepicker plugin.
Examples
In this example we create two sets of UI elements for choosing datetimes β a native picker, and a set of five elements for choosing dates and times in older browsers that don’t support the native input.
The HTML looks like so:
The months are hardcoded (as they are always the same), while the day and year values are dynamically generated depending on the currently selected month and year, and the current year respectively (see the code comments below for detailed explanations of how these functions work.) We also decided to dynamically generate the hours and months, as there are so many of them!