Як встановити значення типової дати введення за замовчуванням на сьогодні?


403

Типи введення HTML5 чудові, новий вбудований інструмент вибору дати Opera - вітер, а Chrome, принаймні, підтримує новий тип введення з реалізацією закрутки.

Але чи є спосіб встановити значення за замовчуванням поля дати на сьогоднішню дату? У Opera я можу вибрати "Сьогодні" з вибору дати, і як тільки я натискаю будь-яку з крок кнопок у Chrome, вона збільшується / зменшується від сьогоднішньої дати.

Я не соромлюсь кодувати рішення цієї незначної проблеми, але мені здається нерозумним, що обидва браузери повністю усвідомлюють поточну дату, але автоматично не з’являться (хоча б як заповнювач).



можливо, це допоможе stackoverflow.com/questions/14212527/…
Musa


4
var date = нова дата (); // створити об'єкт дати var min_date = date.toISOString (). slice (0,10); //// отримати конкретну частину конкретної дати "2018-02-02"
Günay Gültekin

<input type = "date" value = "РРРР-MM-DD" />
Борис Детрі

Відповіді:


288

Як і будь-яке поле введення HTML, браузер не залишить його порожнім, якщо за valueатрибутом не вказано значення за замовчуванням .

На жаль, HTML5 не дає способу вказати "сьогодні" в valueатрибуті (що я бачу), як тільки RFC3339, дійсна дата 2011-09-29.

TL; DR Використовуйте YYYY-MM-DDформат дати або він не відображатиметься


50
для користувачів .net: DateTime.Today.ToString ("yyyy-MM-dd")
dvdmn

3
Зауважте, що значення "0" перед місяцем і днем ​​є необхідним: "2011-09-29" працює, "2011-9-29" не відповідає.
nico

2
Рубі: (Також)DateTime.now.strftime("%Y-%m-%d")
Адам Грант

43
@MartinBarker чи не так, date('Y-m-d')як вимагає провідного нуля?
SGR

15
Для JavaScript: myDate.toLocaleDateString('en-CA')чи трюк
Ulysse BN

218

Об'єкт дати JavaScript надає достатню вбудовану підтримку необхідного формату, щоб уникнути цього вручну:

Додайте це для правильної підтримки часового поясу:

Date.prototype.toDateInputValue = (function() {
    var local = new Date(this);
    local.setMinutes(this.getMinutes() - this.getTimezoneOffset());
    return local.toJSON().slice(0,10);
});


jQuery:

$(document).ready( function() {
    $('#datePicker').val(new Date().toDateInputValue());
});​


Чистий JS:

document.getElementById('datePicker').value = new Date().toDateInputValue();

1
Слідкуйте, чи підтримуєте ви мобільний телефон. На Android 4.0.3 (принаймні) у мене виникли проблеми, коли нова дата, вибрана через контроль спливаючої дати, додається до сьогоднішньої дати, а не замінює її. Наприклад, ви можете закінчити 2013-03-252013-03-27, а не 2013-03-25, і користувач не може змінити це.
Бен Клейтон

1
@Web_Designer Ярмарок досить. Ви хочете скоригуватися спочатку local.setMinutes(this.getMinutes() - this.getTimezoneOffset());(як ця відповідь зрештою дістається) спочатку, потім.
бріанарія

1
Це встановлює лише властивість value , вона не встановлює атрибут, тому якщо форма скидається, вона за замовчуванням не має значення. Крім того, було б набагато зрозуміліше використовувати toISOString , який так і називається toJSON .
RobG

1
@apraetor Насправді все навпаки, оскільки підтримуються лише браузери, які підтримують введення дат valueAsDate(що не дає IE, Firefox, можливо, Safari, в основному все, окрім Chrome, Opera, Edge та деяких мобільних браузерів). Все підтримує valueвластивість, яку використовує моє рішення, навіть коли введення дат повертається до введення тексту в не підтримуючих браузерах, інше рішення буде помилкою або вийде з ладу.
бріанарія

2
Ця відповідь працювала для мене, використовуючи a input[type=datetime-local]і змінивши його на slice(0,19)HTH
jcruz

189

це працює для мене:

document.getElementById('datePicker').valueAsDate = new Date();

https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement


1
це працює у всіх браузерах? а також мобільні версії? Тестували?
Usman Younas

2
@UsmanY Це частина специфікації HTML5, тому все, що підтримує типи введення HTML5, має підтримувати valueAsDate. html.spec.whatwg.org/multipage/forms.html#dom-input-valueasdate
wersimmon

@harbichidian Пропозиція щодо введення дати перебуває на певному рівні для пропозиції valueAsDate. Чи є у вас посилання на підтримку веб-переглядача для цього ресурсу?
Бріанарій

3
Дата буде перетворена в UTC час. Якщо ви о 6 годині вечора на 2018-03-27 в -0600 , і ви встановите valueAsDateна new Date()значення поля буде встановлений в 2018-03-28. Дивіться austinfrance.wordpress.com/2012/07/09/…
Aupajo

1
Як сказав @Aupajo, це встановлює неправильну дату, якщо ви не хочете часу UTC.
ADJenks

81

Наступний код працює добре:

<input type="date" value="<?php echo date('Y-m-d'); ?>" />

Зауважте, що це покладається на PHP.


64
Ваша відповідь повністю залежить від php.
Yëco

1
Якщо ваша контактна форма знаходиться на сторінці PHP (наприклад, на сторінці WordPress або короткому коді), це прекрасно працює. Велике спасибі Ішему!
tristanojbacon

5
Ви можете зменшити надмірність, змінивши <?php echo date('Y-m-d', strtotime(date('Y/m/d'))); ?>на<?php echo date('Y-m-d'); ?>
Мюррей Сміт

7
Це встановлює дату відповідно до дати створення (на сервері, у часовій зоні сервера) документа HTML. Він не повинен відповідати поточній даті, оскільки фактично заповнює поле. Клієнтський JavaScript краще, якщо вам потрібно робити речі, які залежать від користувача.
Юкка К. Корпела

1
ви також можете використовувати короткий тег <? = дата ('Ym-d'); ?>. Одне "відлуння" менше
sashok_bg

36

Ви можете заповнити значення за замовчуванням через javascript, як видно тут: http://jsfiddle.net/7LXPq/

$(document).ready( function() {
    var now = new Date();
    var month = (now.getMonth() + 1);               
    var day = now.getDate();
    if (month < 10) 
        month = "0" + month;
    if (day < 10) 
        day = "0" + day;
    var today = now.getFullYear() + '-' + month + '-' + day;
    $('#datePicker').val(today);
});

Я, мабуть, поставив би трохи зайвого часу, щоб побачити, чи є місяць і дата одноцифровими, і префікс їх із додатковим нулем ... але це повинно дати вам уявлення.

EDIT: Додано чек на додатковий нуль


В Opera (тестується на Opera 12 / Windows) це не працює, якщо ви не ставите провідні нулі в місяць і день.
Ренато

31

Дотримуйтесь стандартного формату Ymd, якщо ви використовуєте PHP

<input type="date" value="<?php echo date("Y-m-d"); ?>">

2
Ви повинні зазначити, що ця відповідь працює, якщо ви використовуєте php, це стосується не всіх.
Мотасем МК

24

HTML

<input type="date" id="theDate">

JS

$(document).ready(function() {
    var date = new Date();

    var day = date.getDate();
    var month = date.getMonth() + 1;
    var year = date.getFullYear();

    if (month < 10) month = "0" + month;
    if (day < 10) day = "0" + day;

    var today = year + "-" + month + "-" + day;       
    $("#theDate").attr("value", today);
});

демонстрація

Якщо ви не хочете використовувати jQuery, ви можете зробити щось подібне

HTML

<input type="date" id="theDate">

JS

var date = new Date();

var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();

if (month < 10) month = "0" + month;
if (day < 10) day = "0" + day;

var today = year + "-" + month + "-" + day;       
document.getElementById("theDate").value = today;

демонстрація


22

У HTML5 як такому немає способу встановити значення за замовчуванням поля дати на сьогоднішню дату? Як показано в інших відповідях, значення можна встановити за допомогою JavaScript, і це, як правило, найкращий підхід, якщо ви хочете встановити за замовчуванням відповідну поточну дату для користувача при завантаженні сторінки.

HTML5 визначає valueAsDateвластивість для input type=dateелементів, і використовуючи його, ви можете встановити початкове значення безпосередньо від об'єкта , створені , наприклад , шляхом new Date(). Однак, наприклад, IE 10 не знає цієї властивості. (Також йому не вистачає справжньої підтримки input type=date, але це вже інше питання.)

Тож на практиці потрібно встановити valueвластивість, і воно повинно відповідати нотації ISO 8601. Сьогодні це можна зробити досить легко, оскільки ми можемо очікувати, що поточні використовувані браузери підтримують toISOStringметод:

<input type=date id=e>
<script>
document.getElementById('e').value = new Date().toISOString().substring(0, 10);
</script>

6
Або якщо ви хочете, щоб він відповідав Y10K:= new Date().toISOString().split('T')[0];
Blazemonger

1
toISOString повертає дату та час UTC, тому може не відображати правильну дату для часового поясу користувача. Наприклад, якщо користувач UTC + 0800, то з півночі до 08:00 вони отримають вчорашню дату.
RobG

18

Якщо ви робите що-небудь, пов’язане з датою та часом у веб-переглядачі, ви хочете використовувати Moment.js :

moment().format('YYYY-MM-DD');

moment()повертає об'єкт, що представляє поточну дату та час. Потім ви викликаєте його .format()метод, щоб отримати рядкове представлення відповідно до заданого формату. У цьому випадку YYYY-MM-DD.

Повний приклад:

<input id="today" type="date">
<script>
document.getElementById('today').value = moment().format('YYYY-MM-DD');
</script>

Якщо у вас вже є момент (), або плануєте більше працювати над датою у вашому веб-додатку, це рішення не вимагає. Момент вирішує стільки питань.
secretwep

10

використовуйте moment.js для вирішення цього питання у 2 рядках, тип введення дати html5 приймає лише "YYYY-MM-DD" цього формату. Я вирішую свою проблему таким чином.

var today = moment().format('YYYY-MM-DD');
 $('#datePicker').val(today);

це найпростіший спосіб вирішити це питання.


8

Javascript

document.getElementById('date-field').value = new Date().toISOString().slice(0, 10);

Jquery

$('#date-field').val(new Date().toISOString().slice(0, 10));

Ще один варіант

Якщо ви хочете налаштувати дату, місяць та рік, просто зробіть суму або підсумки за вашим бажанням. 😎 За місяць починається форма 0, тому потрібно підсумовувати 1 з місяцем.

function today() {
        let d = new Date();
        let currDate = d.getDate();
        let currMonth = d.getMonth()+1;
        let currYear = d.getFullYear();
        return currYear + "-" + ((currMonth<10) ? '0'+currMonth : currMonth )+ "-" + ((currDate<10) ? '0'+currDate : currDate );
    }

Скопіюйте функцію сьогодні

document.getElementById('date-field').value = today();

$('#date-field').val(today());

7

Дуже просто, просто використовуйте серверні мови, такі як PHP, ASP, JAVA або навіть ви можете використовувати javascript.

Ось рішення

<?php
  $timezone = "Asia/Colombo";
  date_default_timezone_set($timezone);
  $today = date("Y-m-d");
?>
<html>
  <body>
    <input type="date" value="<?php echo $today; ?>">
  </body>
</html>

7
<input id="datePicker" type="date" />

$(document).ready( function() {
    var now = new Date();
 
    var day = ("0" + now.getDate()).slice(-2);
    var month = ("0" + (now.getMonth() + 1)).slice(-2);

    var today = now.getFullYear()+"-"+(month)+"-"+(day) ;


   $('#datePicker').val(today);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="datePicker" type="date" />


5

якщо вам потрібно заповнити введену дату, ви можете скористатися цим:

<input type="datetime-local" name="datetime" 
       value="<?php echo date('Y-m-d').'T'.date('H:i'); ?>" />

5

Для NodeJS (експрес із шаблонами SWIG):

<input type="date" id="aDate" name="aDate" class="form-control" value="{{ Date.now() | date("Y-m-d") }}" />

5

Найпростіші рішення, мабуть, не помічають, що буде використовуватися час UTC, в тому числі з високою оцінкою. Нижче наведена спрощена версія ES6, не jQuery, для пари існуючих відповідей:

const today = (function() {
    const now = new Date();
    const month = (now.getMonth() + 1).toString().padStart(2, '0');
    const day = now.getDate().toString().padStart(2, '0');
    return `${now.getFullYear()}-${month}-${day}`;
})();
console.log(today); // as of posting this answer: 2019-01-24

Ви повинні вказати, якому властивості вхідного елемента призначити його. valueабо valueAsDate? Хоча це виглядає добре.
ADJenks

4

Це те, що я зробив у своєму коді, я щойно перевірив, і він спрацював нормально, type type = "date" не підтримує автоматичне встановлення curdate, тож спосіб, який я використовував для подолання цього обмеження, використовував PHP-код як простий код, подібний цьому .

<html>
<head></head>
    <body>
        <form ...>
            <?php
                echo "<label for='submission_date'>Data de submissão</label>";
                echo "<input type='date' name='submission_date' min='2012-01-01' value='" . date('Y-m-d') . "' required/>";
            ?>
        </form>
    </body>
</html>

Сподіваюся, це допомагає!


1
Вітаю, ласкаво просимо до SO!
Шива

4

Обидві верхні відповіді невірні.

Короткий однокласник, який використовує чистий JavaScript, обліковує локальний часовий пояс і не вимагає додаткових функцій, які слід визначати:

const element = document.getElementById('date-input');
element.valueAsNumber = Date.now()-(new Date()).getTimezoneOffset()*60000;
<input id='date-input' type='date'>

Це отримує поточний час дати в мілісекундах (з епохи) і застосовує зміщення часового поясу в мілісекундах (хв * 60 кхв на мілісекунд).

Ви можете встановити дату за допомогою, element.valueAsDateале тоді у вас є додатковий дзвінок до Date()конструктора.


4

Це дійсно потрібно зробити на стороні сервера, оскільки локальний формат часу кожного користувача відрізняється, не кажучи вже про те, що кожен браузер веде себе по-різному.

Значення введених дат Html має бути у такому форматі: yyyy-mm-dd, інакше воно не відображатиме значення.

ASP CLASSIC, АБО VBSCRIPT:

current_year = DatePart("yyyy",date) 
current_month = DatePart("m",date) 
current_day = DatePart("d",date) 

IF current_month < 10 THEN
current_month = "0"&current_month
END IF
IF current_day < 10 THEN
current_day = "0"&current_day
END IF

get_date = current_year&"-"&current_month&"-"&current_day
Response.Write get_date

Результат сьогоднішньої дати: 2019-02-08

Потім у своєму HTML: <input type="date" value="<% =get_date %>"

PHP

просто скористайтеся цим: <input type="date" value="<?= date("Y-m-d"); ?>">


4

Це дуже просто, застосовуючи наступний код, Використовуючи PHP

<input type="date" value="<?= date('Y-m-d', time()); ?>" />

Функція дати поверне поточну дату, приймаючи дату в time().


2

від Javascript:

var today = new Date();

document.getElementById("theDate").value = today.getFullYear() + '-' + ('0' + (today.getMonth() + 1)).slice(-2) + '-' + ('0' + today.getDate()).slice(-2);

2
new Date().getFullYear()+"-"+ ((parseInt(new Date().getMonth())+1+100)+"").substring(1)

1
Будь ласка, додайте опис зі своєю відповіді.
bawa g

1

Якщо ви використовуєте рубін, ви можете використовувати це, щоб встановити значення за замовчуванням на сьогоднішню дату та час:

<input type="datetime-local" name="time" value="<%= Time.now.strftime('%Y-%m-%dT%H:%M') %>" />

1

Просте рішення:

<input class="set-today" type="date">
<script type="text/javascript">
    window.onload= function() {
        document.querySelector('.set-today').value=(new Date()).toISOString().substr(0,10));
    }
</script>

1
@GeorgeJempty Це не так, якщо поточний час у UTC - це інший день, ніж поточний день. Він поверне поточну дату в UTC, а не у ваш місцевий часовий пояс.
ADJenks

@adjenks Heh Я бачу, що це був ідеальний час для тестування, 10 хвилин до півночі
Dexygen

@adjenks я , нарешті , вихопив півдюжини лінії , які дозволяють уникнути UTC пастки і трохи покращують на пару існуючих аналогічних відповідей JQuery / НЕ ES6: stackoverflow.com/a/54341296/34806
Dexygen

Відповідь має додатковий ")" в кінці рядка та сторонні параметри навколо "new Date ()". Повинні бути: document.querySelector('.set-today').value=new Date().toISOString().substr(0,10);
Кірбі Л. Уоллес

0

Оскільки не існує методу встановлення значення за замовчуванням на сьогоднішню дату, я б сказав, що це має залежати від його програми. Якщо ви хочете максимально вплинути на аудиторію вибору дати, використовуйте сценарій на сервері (PHP, ASP тощо), щоб встановити значення за замовчуванням.

Однак якщо це стосується консолі адміністрування CMS, і ви знаєте, що користувач завжди матиме JS або ваш сайт довіряється, тоді ви можете сміливо використовувати JS для заповнення значень за замовчуванням, відповідно до jlbruno.


0

У мене була така ж проблема, і я вирішив її простою JS. Вхід:

<input type="date" name="dateOrder" id="dateOrder"  required="required">

JS

<script language="javascript">
document.getElementById('dateOrder').value = "<?php echo date("Y-m-d"); ?>";
</script>

Важливо: сценарій JS повинен бути в останньому рядку коду або після введення, тому що якщо ви поставите цей код раніше, сценарій не знайде вашого вводу.


2
Якщо ви все одно використовуєте PHP, навіщо турбуватися з JavaScript ?
Blazemonger

0

У самому HTML не існує методу за замовчуванням, щоб вставити сьогоднішню дату в поле введення. Однак, як і будь-яке інше поле введення, воно прийме значення.

Ви можете використовувати PHP для отримання сьогоднішньої дати та введення її у поле значення елемента форми.

<?php
    // Fetch the year, month and day
    $year = date(Y);
    $month = date(m);
    $day = date(d);

    // Merge them into a string accepted by the input field
    $date_string = "$year-$month-$day";

    // Send to the browser the input field with the value set with the date string
    echo "<input type='date' value='$date_string' />";
?>

Поле значення приймає формат YYYY-MM-DD як вхідне, просто створюючи змінну $date_string в тому самому форматі, що вхідне значення приймає і заповнює його роком, місяцем і днем, що вибирається з сьогоднішньої дати та voilá! Ви самі вибрали дату!

Сподіваюся, це допомагає :)

Редагувати:

Якщо ви хочете, щоб поле введення було вкладено в HTML, а не в PHP, ви можете зробити наступне.

<?php
    // Fetch the year, month and day
    $year = date(Y);
    $month = date(m);
    $day = date(d);

    // Merge them into a string accepted by the input field
    $date_string = "$year-$month-$day";
?>
<html>
    <head>...</head>
    <body>
        <form>
            <input type="date" value="<?php print($date_string); ?>" />
        </form>
    </body>
</html>

Я усвідомлюю, що це запитання було задано деякий час назад (2 роки тому), але все ж знадобилося певний час, щоб знайти певну відповідь в Інтернеті, тому це стосується тих, хто шукає відповідь, коли це може бути, і сподіваюся, що це всім допомагає :)

Ще одна редакція:

Майже забув, те, що було для мене королівським болем у минулому, завжди забуває встановити часовий пояс за замовчуванням, коли робимо сценарій у PHP, який використовує функцію date ().

Синтаксис є date_default_timezone_set(...);. Документацію можна знайти тут на PHP.net, а список підтримуваних часових поясів, які потрібно вставити у функцію, можна знайти тут . Це завжди дратувало, оскільки я перебуваю в Австралії, все завжди відштовхується 10 годин, якщо я не встановив це належним чином, оскільки це налаштовано на UTC + 0000, де мені потрібно UTC + 1000, тому просто будьте обережні :)


0

Дякую Пітер, тепер я змінюю свій код.

<input type='date' id='d1' name='d1'>

<script type="text/javascript">
var d1 = new Date();
var y1= d1.getFullYear();
var m1 = d1.getMonth()+1;
if(m1<10)
    m1="0"+m1;
var dt1 = d1.getDate();
if(dt1<10)
dt1 = "0"+dt1;
var d2 = y1+"-"+m1+"-"+dt1;
document.getElementById('d1').value=d2;
</script>

3
Будь ласка, будь ласка, не використовуйте document.write у реальних програмах - так багато проблем із його використанням.
Пітер Харт

Пітер, ти можеш пояснити, що таке завдання. ти отримав?
Nikhil sHETH

Петро, ​​також згадаймо, як ти отримуєш поточну дату як значення за замовчуванням у вхідному типі = дата
Nikhil sHETH

1
Справа не в тому, що це не працює, але в цілому погана практика використовувати document.write. Існує безліч причин, чому це так, ось декілька прикладів: stackoverflow.com/questions/802854/… Якби мені абсолютно довелося це робити у javascript на клієнті, я б використав ідентифікатор для елемента та документа. getElementById, щоб отримати елемент і змінити його, як і деякі інші відповіді на цій сторінці.
Пітер Харт

0

А для тих, хто використовує ASP VBScript

<%
'Generates date in yyyy-mm-dd format
Function GetFormattedDate(setDate)
strDate = CDate(setDate)
strDay = DatePart("d", strDate)
strMonth = DatePart("m", strDate)
strYear = DatePart("yyyy", strDate)
If strDay < 10 Then
  strDay = "0" & strDay
End If
If strMonth < 10 Then
  strMonth = "0" & strMonth
End If
GetFormattedDate = strYear & "-" & strMonth & "-" & strDay
End Function
%>

І тоді в тілі ваш елемент повинен виглядати приблизно так

<input name="today" type="date" value="<%= GetFormattedDate(now) %>" />

Ура!


0

Навіть після всіх цих часів це може комусь допомогти. Це просте рішення JS.

JS

  let date = new Date();
  let today = date.toISOString().substr(0, 10);
  //console.log("Today: ", today);//test
  document.getElementById("form-container").innerHTML =
    '<input type="date" name="myDate" value="' + today + '" >';//inject field

HTML

 <form id="form-container"></form>

Подібне рішення працює в Angular без будь-якої додаткової бібліотеки для перетворення формату дати. Для Angular (код скорочується через загальний компонентний код):

//so in myComponent.ts 
//Import.... @Component...etc...
date: Date = new Date();
today: String; //<- note String
//more const ...
export class MyComponent implements OnInit {
   //constructor, etc.... 
   ngOnInit() {
      this.today = this.date.toISOString().substr(0, 10);
   }
}
//so in component.html 
<input type="date" [(ngModel)]="today"  />

Це занадто громіздко, щоб просто потрібно було використовувати значення за замовчуванням.
реформовано

Який із двох незалежних прикладів ви намагаєтесь вказати? Її 4 рядки кодів в обох прикладах .... Перший приклад - чистий html + js, тому створіть контейнер і скопіюйте вставний код його 3 рядки, якщо ви не рахуєте коментарів. Те саме для кутового прикладу, який став причиною я залишив коментар. Не знаєте, що ви мали на увазі ....
StefaDesign
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.