Як динамічно встановити значення дати bootstrap-datepicker?


77

Я використовую bootstrap datepicker разом із рядком високої діаграми.

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

Ось мій датчик:

<div class="input-append date pull-right" id="dpStartDate" data-date="@DateTime.Now.AddMonths(-1).ToString("dd/MM/yyyy")" data-date-format="dd/mm/yyyy">
    <input class="span2" id="startDateText" size="16" type="text" value="@DateTime.Now.AddMonths(-1).ToString("dd/MM/yyyy")" readonly="">
    <span class="add-on"><i class="icon-th"></i></span>
</div>

Я спробував просто оновити значення за допомогою цього коду:

$('#dpStartDate').attr('data-date', startDate);
$('#startDateText').attr('value', startDate);

який точно оновлює дати, але не встановлює календар.

Я також спробував запустити подію onChange, яка також оновлює дати, але не календар:

$('#dpStartDate').trigger('changeDate', startDate);

$('#dpStartDate').datepicker()
    .on('show', function (ev) {
        ev.stopPropagation();
    })
    .on('changeDate', function (ev, date) {
        var startDate = new Date();
        if (date != undefined) {
            startDate = date;
            $('#dpStartDate').attr('data-date', startDate);
            $('#startDateText').attr('value', startDate);
        }
        else {
            startDate = ev.date;
            $('#dpStartDate').attr(startDate.getDate() + '/' + (startDate.getMonth() + 1) + '/' + startDate.getFullYear());
            $('#startDateText').attr(startDate.getDate() + '/' + (startDate.getMonth() + 1) + '/' + startDate.getFullYear());
        }
        $('#dpStartDate').datepicker('hide');
        ev.stopPropagation();
    });

Хтось знає, чи можливо взагалі так оновити календар?

Дякую

Відповіді:


72

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

$(".datepicker").datepicker("update", new Date());

6
Це працює, але це порушує формат, якщо ви про це заявили html. Мовляв, якщо формат є "dd.mm.yyyy", при оновленні таким чином результати datetimeформатування "mm/dd/yyyy". Чи є для цього обхідне рішення?
Javidan

1
@Javidan Я не тестував, але, можливо, ви могли б за мить передати дату js, а потім вказати формат.
pusle

1
Зверніть увагу, що datepicker! = datetimepicker.
свічник

@Javidan формат не порушиться, якщо ви використовуєте data-date-format = "dd / mm / yyyy", наприклад <input type = 'text' name = "myDateCtrl" data-date-format = "dd / mm / yyyy "placeholder =" Вибрати дату "/>
Panayiotis Hiripis

40
var startDate = new Date();

$('#dpStartDate').data({date: startDate}).datepicker('update').children("input").val(startDate);

Інший спосіб

$('#dpStartDate').data({date: '2012-08-08'});
$('#dpStartDate').datepicker('update');
$('#dpStartDate').datepicker().children('input').val('2012-08-08');
  1. встановити календарну дату на дату властивостей
  2. необхідне оновлення)
  3. встановіть вхідне значення (пам’ятайте, що введення є дочірнім для datepicker).

таким чином ви встановлюєте дату "08.08.08"


3
Чи можете ви додати трохи пояснення до свого фрагмента коду? :)
asteri

3
чому датапікер не прослуховує зміни у введенні тексту і не робить цього сам?
drogon

4
... і цей код не працює, цей код працює $ ('# dpStartDate'). datepicker ('update', '2012-08-08');
drogon

Як можна встановити формат дати після виклику оновлення? наприклад, Val я встановив, "2012-08-12 06:05:04"і я хочу встановити формат після оновлення "12/08/2012 06:05:04"? Чи можливо як? Мій код:$('#start').datepicker("setValue", "2014-08-08 6:05:04" ); $("$start").datepicker("update"); $("#start").datetimepicker({format: 'dd/mm/yyyy hh:ii', language: 'fr', autoclose: true, todayBtn: true});
Ашвін Пармар

Після встановлення значення дати, коли я натискаю на введення дати, воно покаже мені дату та місяць належним чином, але рік починається з "1989". Не знаю чому?
Ashwin Parmar


12

Спробуйте цей код,

$(".endDate").datepicker({
    format: 'dd/mm/yyyy',
    autoclose: true
}).datepicker("update", "10/10/2016"); 

це оновить дату та застосує також формат dd/mm/yyyy.


11

Краще використовувати:

$("#datepicker").datepicker("setDate", new Date); 

замість

$("#datepicker").datepicker("update", new Date);

Якщо ви використовуєте оновлення, подія changeDate не запускається.


9

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

$('#datepicker').datepicker("setValue", '01/10/2014' );
$('#datepicker').datepicker("setValue", new Date(2008,9,03));

Так це було від мене! Я не впевнений, чому формат дати не спрацював, але відформатована дата працює, встановивши значення інтерфейсу користувача та попередньо вибравши дату у спливаючому вікні календаря. Об'єкт дати не працює, щоб встановити для себе спливаюче вікно календаря.
Тімоті Гонсалес,

4

Мені довелося зробити 'setValue' та 'update', щоб змусити його повністю працювати

$('#datepicker').datepicker('setValue', '2014-01-29').datepicker('update');

2
Я спробував це з консолі. це не працює. $ ('# start'). datepicker ('setValue', '2014-01-29'). datepicker ('update');
Ashwin Parmar

Яку версію Bootstrap ви використовуєте @AshwinParmar? Я використовую Bootstrap v4.
Something

3

Це справді працює.

Простий,

Легко зрозуміти,

Єдиний метод встановлення та оновлення плагіна, який працював у мене.

$(".datepicker").datepicker("update", new Date());

Інші способи оновлення

$('.datepicker').data({date: '2015-01-01'});
$('.datepicker').datepicker('update');

Не забудьте зателефонувати updateвручну.


10
Це ТОЧНО те саме, що відповідь @ Імрана, ви нічого не додали до відповіді, яка вже існувала майже 5 місяців до вашої відповіді.
Мішель Айрес,

1
Не біда, не потрібно вибачатися за це. Коли це відбувається, ви завжди можете проголосувати за вже існуючу відповідь. Але ваша відповідь правильна, це просто "копія" від + Імрана, і я просто хотів зазначити це
Мішель Айрес

3
Чи не слід цю відповідь видалити як дублікат?
eirikir

3

Для Bootstrap 4

Якщо ви використовуєте групу введення в Bootstrap, вам потрібно приєднати нову дату до батьківського поля текстового поля, інакше якщо ви натиснете піктограму календаря та клацніть поза датою, буде видалено.

<div class="input-group date" id="my-date-component">
   <input type="text" />
    <div class="input-group-append">
      <span class="input-group-text"><i class="fa fa-calendar"></i></span>
    </div>
</div>

Вам потрібно встановити дату input-group.date.

$('#my-date-component').datepicker("update", new Date("01/10/2014"));

Також перевірте метод оновлення datepicker


3

При використанні методів інших відповідей налаштовані параметри втрачаються, щоб виправити це, ви можете використовувати глобальну конфігурацію:

$('.datepicker').datepicker();
$.fn.datepicker.defaults.format = 'dd/mm/yyyy';
$.fn.datepicker.defaults.startDate = "0";
$.fn.datepicker.defaults.language = "es";
$.fn.datepicker.defaults.autoclose = true;
$.fn.datepicker.defaults.todayHighlight = true;
$.fn.datepicker.defaults.todayBtn = true;
$.fn.datepicker.defaults.weekStart = 1;

Тепер ви можете використовувати метод оновлення, не втрачаючи параметри:

$(".datepicker").datepicker("update", new Date("30/11/2018"));

3

Код використання:

var startDate = "2019-03-12"; //Date Format YYYY-MM-DD

$('#datepicker').val(startDate).datepicker("update");

Пояснення:

Datepicker (поле введення) Селектор #datepicker.

Оновити поле введення.

Зателефонуйте датчику дати з оновленням опцій


2

Для датчиків часу використовую цю роботу для мене

$('#lastdate1').data({date: '2016-07-05'});
$('#lastdate1').datetimepicker('update');
$('#lastdate1').datetimepicker().children('input').val('2016-07-05');

Єдина відповідь звідси, яка спрацювала для мене (v1.6.4). Дякую!
джеральдо

2

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

$('.selector').datepicker({
    format:'dd/mm/yyyy',
});

$('.selector').datepicker('update', '13/09/2019');

2

$('#DateDepenseInput').val("2020-12-28")
формат повинен бути як рік-місяць-день
Це добре працювало для мене ...


1

Такий простий спосіб (один рядок)

$('#startDateText').val(startDate).datepicker("update");

Хоча цей код може відповісти на питання, надаючи додатковий контекст щодо того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
rollstuhlfahrer

1

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

$('#dpStartDate').data("date", startDate);


0

Ви можете використовувати цей простий метод, наприклад:

qsFromDate = '2017-05-10';
$("#dtMinDate").datepicker("setDate", new Date(qsFromDate));
$('#dtMinDate').datepicker('update');

0

Якщо ви використовуєте Bootstrap DatePicker версії 4+

Примітка. Усі функції доступні через атрибут data, наприклад $ ('# datetimepicker'). Data ("DateTimePicker"). FUNCTION ()

Щоб встановити значення дати, ваші коди мають бути такими

$("#datetimepicker").data("DateTimePicker").date(new Date());

0

Відповідь @Imran працює для текстових полів

для застосування datepicker до div використовуйте це:

$('#div_id').attr("data-date", '1 January 2017');
$('#div_id').datepicker("update");

Розділення комами декількох дат:

$('#div_id').attr("data-date", '1 January 2017,2 January 2017,3 January 2017');



0

Спробуйте

$("#datepicker").datepicker('setDate','25-05-2020').datepicker('fill');

Це працює для мене, коли setDateне оновлюється значення текстового поля вибору дати у браузері. "Додатковий .datepicker('fill');" повторно заповнює завантажувальну стрічку datepickerна нову дату, яка встановлюється setDateметодом.


0

Під час завантаження сторінки, якщо ви не хочете запускати подію changeDate, яку я не робив

$('#calendarDatePicker').data("date", new Date());
$('#calendarDatePicker').datapicker();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.