Как определить, ввел ли пользователь только дату или время в поле формы?

У меня есть поле, в котором пользователь может ввести только дату или время в текстовом поле. Теперь я знаю, что если я создам 2 поля, одно для даты и одно для времени, я могу проверить, пусто ли поле времени или нет.

То, что я хотел бы сделать, это иметь только одно поле. Если пользователь указывает дату окончания, требуется только время, если пользователь вводит дату и время, требуется и то, и другое.

У меня проблема в следующем: если пользователь вводит «8.12.2013», это фактически означает «8.12.2013 0:0:0», где я конвертирую его в Cdate. Но тогда время окончания — это первая секунда даты 8.12.2013, что означает, что 8.12.2013 означает остановку в эту дату (это поле времени остановки). Но на самом деле, если пользователь пишет 8.1.2013, значит, валяться до конца дня.

Конечно, я могу сделать date()>"8.12.2013", и это сработает, но тогда, если пользователь введет дату и время, это не сработает, поскольку оно удаляет часть времени.

Мой вопрос: есть ли какая-либо функция в ASP, которая проверяла бы, установлена ​​ли временная часть даты в переменной? Я пытался использовать TIME, но он показывает 0 для часов, 0 для минут и 0 для секунд, даже если используется Cdate("8.12.2013"). Мне нужна функция, чтобы сообщить мне, что время не установлено, чтобы я мог провести сравнение, используя date() вместо now().

Я надеюсь, что в этом есть смысл.


person Jerry2    schedule 10.12.2013    source источник
comment
может быть, просто установите максимальную длину в текстовом поле, чтобы люди не могли ввести достаточно символов, чтобы включить время? Кроме того, вы можете / должны просто проверить текстовое поле с помощью javascript, чтобы убедиться, что это просто дата, и сказать: «Эй, просто дайте мне дату».   -  person Lenny    schedule 10.12.2013
comment
Кроме того, вы можете просто рассматривать его как строку и разбивать на пробел, брать первую половину (до пробела) и отбрасывать остальное.   -  person Lenny    schedule 10.12.2013
comment
В каком формате пользователь может ввести дату? (т.е. всегда мм.дд. гггг) или вы разрешаете другие форматы. Если формат предсказуем, разбейте дату периода на массив. Если размер массива равен 3, а последний элемент имеет длину 2 или 4 символа, они ввели только дату...   -  person Sparky    schedule 10.12.2013
comment
Я не хотел бы ничего отбрасывать, я хотел бы знать, ввел ли пользователь только дату и время или дату.   -  person Jerry2    schedule 10.12.2013
comment
Если IsDate(var) возвращает true, а Instr(var,:) возвращает › 0, у вас есть время в var   -  person MC ND    schedule 10.12.2013
comment
Хм, спасибо, это может сработать.   -  person Jerry2    schedule 10.12.2013


Ответы (1)


Вы можете попробовать что-то простое, например:

If CLng(myDate) = myDate Then ...

Даты рассматриваются как время после определенной даты и т. д., поэтому целочисленное значение даты удалит время.

-- РЕДАКТИРОВАТЬ --

Просто добавьте к приведенному выше коду: CLng преобразует дату и время в просто дату. Сравнив это со всей датой, вы можете увидеть, была ли включена какая-либо дробная часть.

Имейте в виду, что это будет считаться плохой практикой в ​​строго типизированной среде, такой как .NET, но классические типы ASP являются вариантами и достаточно гибкими.

person Paul    schedule 10.12.2013
comment
Но я не хочу удалять время вообще. Я хотел бы посмотреть, находится ли время в поле или нет. - person Jerry2; 10.12.2013
comment
Это не удалит время из дат, оно просто проверяет, присутствует ли время. Попробуйте код и посмотрите, работает ли он для вас. - person Paul; 10.12.2013