Не могу установить значение секундбыть 0 - PullRequest
0 голосов
/ 20 сентября 2019

Итак, у меня есть этот класс с атрибутом Start типа DateTime.

public class ClosedPlatform {

    public DateTime Start;

}

Я пытаюсь связать атрибут Start экземпляра ClosedPlatform с входом типа datetime-местный.В то же время я обнаружил, что локальные входы datetime по умолчанию не отображают секунды DateTime, поэтому я пытаюсь заставить его отображать значение секунд Start.

ClosedPlatform closedPlatform;

...

<input type="datetime-local" step="1" @bind="@closedPlatform.Start" @bind:format="yyyy-MM-ddTHH:mm:ss"/>

удалось настроить вход, чтобы он почти работал.Установка step="1", кажется, является распространенным советом в Интернете, чтобы получить локальный ввод даты и времени для отображения секунд, и это происходит.Однако моя проблема заключается в том, что входные данные не позволят мне установить значение секунд равным 0. Если значение секунд closedPlatform.Start в секундах уже равно 0 до первой загрузки элемента ввода, то 0 секунд правильно отображаются во входных данных.Однако, если значение секунд затем изменить на что-либо, кроме 0, я не могу использовать элементы управления вводом, чтобы снова установить его на 0 (ни ввод, ни использование элементов управления вверх и вниз не будет работать).Если Start имеет значение секунд 59 и я увеличиваю его на 1, значение секунд показывает 0 в течение доли секунды, прежде чем вернуться к 59 (то же самое, если я пытаюсь перейти от 1 к 0).В то время как что-то вроде, скажем, значения минут, я могу просто изменить значение от нуля до ненулевого значения.

Так что мне интересно, есть ли способ получить локальный ввод даты и времени, чтобы позволить мне ввести 0 длязначение секунд?Я бы подумал, что больше людей будут иметь эту проблему, но я не мог найти нигде обсуждения этого вопроса.Я обнаружил, что datetime-local выглядит как относительно новый тип ввода и, по-видимому, полностью поддерживается только в Chrome, Edge и Opera (я использую Chrome), так что это просто вопрос новой функции, которая немного грубоватакрая?

1 Ответ

0 голосов
/ 20 сентября 2019

Введение:

Прежде всего, цитирование Mozilla <input type="datetime-local"> документы :

Секунды не поддерживаются.

Это означает, что секунды не поддерживаются элементом управления, элемент управления никогда не будет устанавливать значения для части seconds.Использование step="1" имеет только визуальный эффект.

Что касается вашего кода, для работы с датами необходимо удалить часть seconds из формата связывания, просто "гггг-ММ-ддТЧ: мм":

<input type="datetime-local"  
       @bind="@closedPlatform.Start" 
       @bind:format="yyyy-MM-ddTHH:mm" step="1"/>

sample

Обходной путь:

Если вы хотите работать с секундами, вам нужно использовать string вместо DateTime(и используйте Typecasting, если хотите):

<h5>String: @datestr</h5>
<h5>DateTime: @(parseString(datestr))</h5>
<input type="datetime-local" @bind="datestr"  step="1" />


@code {                     

  string datestr = "2013-10-24T20:36:00";

  protected DateTime? parseString(string s)
  {
      ... your code to cast string to datetime
  }
}

workaround

Отказ от ответственности Не пытайтесь использовать это на производстве,секунды не поддерживаются.Некоторые интернет-навигаторы или устройства не будут работать с этим обходным путем.

Попробуйте его на blazorfiddle .

...