2013-03-18 2 views
1

У меня есть textbox, который принимает дату ввода от пользователя. теперь я хочу сделать validator, который проверяет, что дата больше, чем сегодня или нет.Сравните дату с сегодняшнего дня в asp.net

я попробовал эту ссылку, но у него есть некоторые проблемы http://forums.asp.net/t/1116715.aspx/1

если я даю эту дату 25/03/2013 это правильно, но если дать 01/04/2013, он говорит, что это меньше, чем сегодня.

**

Update

<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="txtReturnDate" 
           Display="Dynamic" ErrorMessage="Date should be greater then today" ForeColor="Red" 
           Operator="GreaterThan" ValidationGroup="VI">Date should be greater then today</asp:CompareValidator> 

**

Пожалуйста, помогите мне решить эту проблему

+0

Каков ваш код сравнения?Надеюсь, вы не пытаетесь сравнить строки? (вы все равно можете сравнить его, но ему нужно другое представление) – Yahya

+1

вы должны проверить текущую культуру: это может быть '01/04/2013' как' 4 января 2013' не как '1 апреля 2013' – Sachin

+0

Покажите нам некоторый код ! Вы задали тип 'Date', не так ли? –

ответ

2

хорошо я сделал это,

CompareValidator1.ValueToCompare = DateTime.Today.ToString("MM/dd/yyyy"); 
0

Он считает 1/4/2013 это 4 января. Вы должны создать объект DateTime с использованием нового DateTime (год, месяц, день) конструктор Н. comparisson будет работать правильно, то есть

var compareDate = new DateTime(2013,4,1) 
bool afterToday = DateTime.Today < compareDate 
1

Проблема заключается в том, что 25/3/2013 является unambiguosly 25th March 2013, однако с неправильными настройками культуры, 01/04/13 может быть 4th january 2013, что действительно до сегодняшней даты. Я полагаю, вы считали, что входите в 1st April 2013, который будет после.

Раствор один из

  • Использование однозначная формата даты при вводе в вашем текстовом поле (2013-01-04 для 1-го апреля)
  • Используйте компонент Селектор дата, которая предоставляет фактическую дату
  • синтаксического анализа дату так, как вы ожидаете (dd/MM/yyyy)

проблема с asp:CompareValidator в том, что он, кажется, не underst и что даты могут быть отформатированы по-разному и используют только вариант ToShortDateStringDateTime для сравнения (кто бы ни реализовал это, нужно снимать!). Решение согласно this question, как представляется, использовать CustomValidator

protected void DateTimeComparision_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    args.IsValid = DateTime.ParseExact(txtDate.Text,"dd/MM/yyyy") > DateTime.Today 
} 
+1

Я принимаю ввод в форме 01/04/2013, которая на самом деле 1 апреля 2013 года, и моя культура «en-GB» –

0

это виды даты валидаций должны быть permormed на клиенте side..in моей заявке мы использовали следующий код

convert: function (d) { 
     /* Converts the date in d to a date-object. The input can be: 
     a date object: returned without modification 
     an array  : Interpreted as [year,month,day]. NOTE: month is 0-11. 
     a number  : Interpreted as number of milliseconds 
     since 1 Jan 1970 (a timestamp) 
     a string  : Any format supported by the javascript engine, like 
     "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc. 
     an object  : Interpreted as an object with year, month and date 
     attributes. **NOTE** month is 0-11. */ 
     return (
     d.constructor === Date ? d : 
     d.constructor === Array ? new Date(d[0], d[1], d[2]) : 
     d.constructor === Number ? new Date(d) : 
     d.constructor === String ? new Date(d) : 
     typeof d === "object" ? new Date(d.year, d.month, d.date) : 
     NaN 
    ); 

isFutureDate: function (a) { 
     var now = new Date(); 
     return (a > now) ? true : false; 
    }, 

сейчас вызовите вышеуказанные функции, подобные этому (isFutureDate (convert («ваше значение даты формы»))).

+0

Если вы выполняете проверку на стороне клиента, это здорово, но вы никогда не должны полагаться на нее. , – Jamiec

+0

yup, если пользователь явно отключает параметр javascript в своем браузере, тогда этот код падает на его лице..это просто быстрое решение его проблемы, это все .. :) –

3

Использования ниже коды для сравнения указанной даты с сегодняшней датой

string date = "01/04/2013"; 
       DateTime myDate = DateTime.ParseExact(date, "dd/MM/yyyy", 
              System.Globalization.CultureInfo.InvariantCulture); 
       if (myDate > DateTime.Today) 
       { 
        Console.WriteLine("greater than"); 
       } 
       else 
       { 
       Console.WriteLine("Less Than"); 
       } 
Смежные вопросы