нокаут дата привязки данных NaN / NaN / NaN - PullRequest
0 голосов
/ 29 мая 2020
• 1000

my_date - строковая дата «2020-09-13T00: 00: 00»

, но всегда показывает NaN / NaN / NaN

Я пытался использовать момент. js но он дал мне "Недействительную дату"

Демо:

Date.prototype.toFormattedDate = function() {
  var dd = this.getDate();
  if (dd < 10) dd = '0' + dd;
  var mm = this.getMonth() + 1;
  if (mm < 10) mm = '0' + mm;
  var yyyy = this.getFullYear();
  /* change format here */
  return String(dd + "/" + mm + "/" + yyyy);
};

const formatted = new Date("2020-09-13T00:00:00").toFormattedDate();
console.log(formatted)

1 Ответ

1 голос
/ 30 мая 2020

Это происходит потому, что my_date - наблюдаемая. new Date(my_date) попытается преобразовать наблюдаемую в дату, и это не удастся. Итак, получите значение в наблюдаемом, используя my_date(), и используйте его в new Date() конструкторе

Date.prototype.toFormattedDate = function(){var a=this.getDate();if(a<10){a="0"+a}var b=this.getMonth()+1;if(b<10){b="0"+b}var c=this.getFullYear();return String(a+"/"+b+"/"+c)};

ko.applyBindings({ my_date: ko.observable('2020-09-13T00:00:00') })
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<span class="form-control" data-bind="text: new Date(my_date()).toFormattedDate() " />

Другой вариант - создать настраиваемую привязку для вашего формата даты. Вы можете переместить весь код формата даты в пользовательскую привязку напрямую, если вы не хотите загрязнять Date.prototype

function customDateHandler(element, valueAccessor) {
  var value = ko.unwrap(valueAccessor());
  element.textContent = new Date(value).toFormattedDate()
}

ko.bindingHandlers.customDateFormat = {
  init: customDateHandler,
  update: customDateHandler
};

И использовать привязку в своем диапазоне:

<span class="form-control" data-bind="customDateFormat: my_date" />

Вот фрагмент:

function customDateHandler(element, valueAccessor) {
  var value = ko.unwrap(valueAccessor());
  element.textContent = new Date(value).toFormattedDate()
}

ko.bindingHandlers.customDateFormat = {
  init: customDateHandler,
  update: customDateHandler
};

Date.prototype.toFormattedDate = function(){var a=this.getDate();if(a<10){a="0"+a}var b=this.getMonth()+1;if(b<10){b="0"+b}var c=this.getFullYear();return String(a+"/"+b+"/"+c)};

ko.applyBindings({ my_date: ko.observable('2020-09-13') })
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<span class="form-control" data-bind="customDateFormat: my_date" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...