2014-01-16 3 views
5

Я пытаюсь определить, был ли экземпляр объекта с моментальным значением (в дополнение к дате). Например:Проверьте, не содержит ли момент времени?

var date = moment("2014-01-16"); 
date.format("h:mm a"); // 12:00 am 

и

var date2 = moment("2014-01-16 09:30"); 
date.format("h:mm a"); // 9:30 am 

Как я могу спросить date, если он содержит время (а не только значение по умолчанию)?

+1

Есть проекты, которые используют обходной путь для этого проблема. Например, обратитесь к модулю узла Fullcalendar: http://fullcalendar.io/docs/utilities/Moment/#ambiguously-timed – nyi

ответ

4

Ну, технически, конструктор, который передает только дату, создает экземпляр его со временем, 12:00:00, хотя он неявный. Тем не менее, вот некоторые возможные решения.

из наименее безопасных и наименее работы к наиболее безопасным и большинство работ:

1) Проверьте, если он точно равен 12:00:00 и считать, что не был установлен. Плохой подход, если в вашем прецеденте часто случаются события около полуночи.

2) Никогда не создавайте экземпляр момента, не указывая явно время.

3) Wrap момент в пользовательском объекте, или создать совершенно новый пользовательский объект, способный представлять нулевой временный случай (флаг, обнуляемые переменный и т.д.)

+0

Спасибо, Dan, я сейчас использую метод 1, но я ищу что-то более надежное , Я не уверен, что хочу зайти так далеко, как создать пользовательский объект, хотя я не уверен, что хочу заняться всеми крайними случаями разбора из возможных входов datetime ... и я предпочел бы, чтобы полночь была приемлемой если возможно. даже если нечасто. – Billy

+0

Я бы использовал 3a: мгновенную оболочку. У этого есть два члена, момент и bool nullTime. Конструктор должен выполнить достаточно синтаксического анализа, чтобы определить, содержит ли вход время и устанавливает флаг nullTime в true, если это не так. – Dan

+1

Так что я думаю, что я собираюсь сделать, это использовать метод 1, но затем проверить значение 'moment._i', которое содержит значение, переданное конструктору. Если это значение содержит 00:00:00, то это было передано явно, иначе оно было задано конструктором момента. Этот подход не будет работать для моментов, построенных как 'var d = moment()', но в этом случае это не применимо. По какой-то причине это было бы плохой идеей? – Billy

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