Pass Date Values from Ajax Call to MVC

65,419

Solution 1

Don't do any tricks with data formats. Just use standard function date.toISOString() which returns in ISO8601 format.

from javascript

$.post('/example/do', { date: date.toISOString() }, function (result) {
    console.log(result);
});

from c#

[HttpPost]
public JsonResult Do(DateTime date)
{
     return Json(date.ToString());
}

Solution 2

Converting the json date to this format "mm/dd/yyyy HH:MM:ss" is the whole trick dateFormat is a function in jsondate format.js file found at http://blog.stevenlevithan.com/archives/date-time-format

var _meetStartTime = dateFormat(now, "mm/dd/yyyy HH:MM:ss");

Solution 3

Can you not just pass one DateTime up, and separate the Date part from the time part on the server?

Can you not just pass '_mDate': now;

public ActionResult SetMeeting(string ComputerName, DateTime? _mDate)
{
   // Then in here use _mDate.Date, and _mDate.Time    
}

Solution 4

Why not convert the date (and time) into a timestamp from Unix Epoch and then use js to display the date?

c#

public double FromUnixEpoch(DateTime value)
{
    DateTime unixEpoch = new DateTime(1970, 1, 1);
    double timeStamp = (value - unixEpoch).Ticks / 1000;
    return timeStamp;
}

js

var myDate = new Date( object.myEpochDate *1000);
myDate.toUTCString().toLocaleString();

With this approach you can pass the epoch as a string inside json and then handle it like a date in js.

Share:
65,419
Nanu
Author by

Nanu

Updated on May 30, 2020

Comments

  • Nanu
    Nanu almost 4 years

    MY Ajax call

     $('#QuickReserve').click(function () {
            var now = new Date();
            alert(now);
    
            var _data = {
                'ComputerName': _computerName,
                '_mStart': now.toTimeString(),
                '_mEnd': now.toDateString()
            };
            $.ajax({
                cache: false,
    //            contentType: "application/json; charset=utf-8",
                type: "POST",
                async: false,
                url: "/Home/SetMeeting",
                dataType: "json",
                data: _data,
                success: "",
                error: function (xhr) {
                    alert("Error");
                    alert(xhr.responseText);
                }
            });
        });
    

    MY C# code

     public ActionResult SetMeeting(string ComputerName, DateTime? _mStart, DateTime? _mEnd)
            {
               }
    

    DateTime values are not received at code end..... They just appear blank. In jquery when i tried to

    '_mStart': now.toTimeString(),
                '_mEnd': now.toDateString()
    

    to datestring does return today's date, but, i want time part of date time also.

  • Nanu
    Nanu almost 13 years
    Only date part is sent successfully, not the timepart
  • ETFairfax
    ETFairfax almost 13 years
    Can you not just pass '_mDate': now
  • Nanu
    Nanu almost 13 years
    I want to pass date from js to c#, and not the other way around.
  • gnome
    gnome almost 13 years
    Sorry Nikhil, misunderstood you. Is JS convert the datetime to unix epoch, var myDate= new Date(); var unixEpoch = myDate.getTime(); In C# convert it from unix epoch: public DateTime fromUnixEpoch(long epoch) { return (new DateTime(1970, 1, 1, 0, 0, 0)).AddSeconds(epoch); }
  • Nanu
    Nanu almost 13 years
    I came up with an easy solution, i formatted the json date to the "mm/dd/yyyy HH:MM:ss" format, and it worled like magic. Thanks
  • Luke Vo
    Luke Vo almost 9 years
    This is the correct answer, the marked answer is depend on the server's system date format.
  • Janco de Vries
    Janco de Vries almost 5 years
    Can't use this you want to receive the date from a datepicker. Any alternatives for when I want to receive a date from a datepicker?