2015-04-20 10 views
2

У меня есть следующие строки JavaScript с использованием MomentJSMoment.js создает новую дату неправильно

var date = moment('20/04/20000', 'DD/MM/YYYY'); //notice year twenty thousand 
alert(date.format()); // alerts "2000-04-20T00:00:00+01:00" 

Если изменить формат DD/MM/YYYYY он работает, как и следовало ожидать, за исключением, конечно, если я ввести 6 цифр года. Я знаю, что это произвольно, но меня это беспокоит. Как использовать формат, который будет ожидать любое количество цифр в году?

+0

Я не думаю, что вы можете. Если вы не модифицируете плагин для этого. – evolutionxbox

+0

Что вы пытаетесь достичь? – Mou

+0

вы, вероятно, не можете. –

ответ

1

Похоже, что момент игнорирует какие-либо дополнительные параметры specfiers. Таким образом, вы можете использовать столько Y, сколько вы ожидаете, что вам понадобится ваша максимальная дата. Например, этот код указывает момент ожидать 10 цифр года:

moment('20/04/20000', 'DD/MM/YYYYYYYYYY').format(); 

но это возвращаемое значение выглядит как то, что вы ожидаете, 5 цифр года:

«20000-04-20T00: 00: 00- 04:00 "

Это не задокументированная функция, и я буду очень осторожен в отношении этого кода, поскольку вы будете использовать обновления в будущем. Защитите этот код с помощью модульных тестов.

+0

Спасибо, Трэвис. Это не идеально, поскольку (как вы говорите) это не совсем стабильно. Кроме того, технически пользователь всегда мог бы ввести еще одну цифру, чем я ожидаю. «Сколько я ожидаю?» == «Как долго длится струна?» – hofnarwillie

+0

Какой тип программного обеспечения вы пишете, который должен иметь даты 10 миллиардов лет в будущем? –

+0

Вам не хватает точки. Мне это не нужно. На самом деле я специально нуждаюсь в ней, чтобы не допускать этого. Поэтому, если пользователь вводит это, он должен сказать: «Это недопустимо». В настоящее время, если пользователь вводит большее число, предполагается, что это меньшее число, поэтому моя проверка предполагает, что он действителен (что это не так) – hofnarwillie

Смежные вопросы