Ashwin Parakkal
Ashwin Parakkal

Reputation: 23

Date difference returning wrong answer

I would really like some guidance on this problem i have been facing. I am trying to find out the difference between 2 dates from textbox.

   protected void Button1_Click(object sender, EventArgs e)
{
    a = TextBox1.Text.ToString().Trim();
    b = TextBox2.Text.ToString().Trim();
    DateTime c = new DateTime();
    DateTime d = new DateTime();
    c = Convert.ToDateTime(a);
    d = Convert.ToDateTime(b);
    System.TimeSpan diffr = d - c;
    Response.Write(diffr.Days);
}

The above is the code i have written on Button Click event. The problem is that, the code returns the difference wrong.

i.e if the diff between 12/02/2013 and 11/02/2013 is to be found, instead of returning 1 the code returns 30. Similarly diff between 12/02/2013 and 10/02/2013 is to be found, instead of returning 2 the code returns 61.

I am using the Jquery DatePicker for selecting the date! Kindly help as all my search has not yielded any solutions.

Upvotes: 1

Views: 1100

Answers (5)

Sen Jacob
Sen Jacob

Reputation: 3442

You can change the jQuery datepicker's date format as

$("#txtDate.datepicker").datepicker({ dateFormat: 'mm-dd-yy' });

In jQuery, you can parse the test to date as

var dateInJs = $.datepicker.parseDate('mm-dd-yy', $('#txtDate.datepicker').val());

Or in .NET you can parse the date in 'dd-MM-yyyy' format as

DateTime.ParseExact(txtDate.Text, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);

also you can use CultureInfo in .NET like

DateTime Date = DateTime.Parse(txtDate.Text, System.Globalization.CultureInfo.CreateSpecificCulture("hi-IN"));

Upvotes: 1

user1990587
user1990587

Reputation: 386

I think this problem is due to your computer date time format setting. Please change your computer date time format to dd/MM/yyyy format and try again.

Upvotes: 0

Microsoft DN
Microsoft DN

Reputation: 10030

You should convert your date format to dd/mm/yyyy before doing substraction. So here is your final code-

protected void Button1_Click(object sender, EventArgs e)
{
        string a, b;
        a = TextBox1.Text.ToString().Trim();
        b = TextBox2.Text.ToString().Trim();
        DateTime c = new DateTime();
        DateTime d = new DateTime();
        c = Convert.ToDateTime(a);
        d = Convert.ToDateTime(b);

        DateTime to_datetime = DateTime.ParseExact(a, "dd/MM/yyyy",
                                           System.Globalization.CultureInfo.InvariantCulture);
        DateTime from_datetime = DateTime.ParseExact(b, "dd/MM/yyyy",
                                                     System.Globalization.CultureInfo.InvariantCulture);
        System.TimeSpan diffr = to_datetime - from_datetime;
        Response.Write(diffr.Days);
}

Upvotes: 2

शेखर
शेखर

Reputation: 17614

The only problem is the format of the date.
As you have written it is showing the month difference rather than date difference.
Try using datetime.parseexact and specify your format

Example:-

 string poop = "2005-12-14T14:35:32.1700000-07:00";
 DateTime poo = DateTime.ParseExact(poop,"yyyy-MM-ddTHH:mm:ss.fffffffzzz",        
                                System.Globalization.CultureInfo.InvariantCulture);

In your case

 string sDate1=TextBox1.Text.ToString().Trim();
 string sDate2=TextBox1.Text.ToString().Trim();

 DateTime dt1= DateTime.ParseExact(sDate1,"MM-dd-yyyy",        
                                System.Globalization.CultureInfo.InvariantCulture);
 DateTime dt2= DateTime.ParseExact(sDate2,"MM-dd-yyyy",        
                                System.Globalization.CultureInfo.InvariantCulture);

 System.TimeSpan diffr =dt2 - dt1;
 Response.Write(diffr.Days);

And it should work.

Upvotes: 1

aspiring
aspiring

Reputation: 1647

Perhaps you can use TimeSpan:

DateTime startTime = '';
DateTime endTime = '';

TimeSpan span = endTime.Subtract( startTime );

Next you can utilize span.Seconds, span.Days...etc

Upvotes: 0

Related Questions