I have been reading that if you want to convert from JavaScript dates to C# dates you should use getTime()
and then add that result to a C# DateTime
.
Suppose I have this JavaScript time:
Date {Tue Jul 12 2011 16:00:00 GMT-0700 (Pacific Daylight Time)}
It renders to 1310522400000
milliseconds
var a = new DateTime(1970, 01, 01).AddMilliseconds(1310522400000);
// result
7/13/2011 2:00:00 AM
So this is wrong. I am not sure what I need to do.
You could use the toJSON() JavaScript method, it converts a JavaScript DateTime to what C# can recognise as a DateTime.
The JavaScript code looks like this
var date = new Date();
date.toJSON(); // this is the JavaScript date as a c# DateTime
Note: The result will be in UTC time
First create a string in your required format using the following functions in JavaScript
var date = new Date();
var day = date.getDate(); // yields date
var month = date.getMonth() + 1; // yields month (add one as '.getMonth()' is zero indexed)
var year = date.getFullYear(); // yields year
var hour = date.getHours(); // yields hours
var minute = date.getMinutes(); // yields minutes
var second = date.getSeconds(); // yields seconds
// After this construct a string with the above results as below
var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second;
Pass this string to codebehind function and accept it as a string parameter.Use the DateTime.ParseExact()
in codebehind to convert this string to DateTime
as follows,
DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
Hope this helps...
You were almost right, there's just need one little fix to be made:
var a = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
.AddMilliseconds(1310522400000)
.ToLocalTime();
If you want to send dates to C# from JS that is actually quite simple - if sending UTC dates is acceptable.
var date = new Date("Tue Jul 12 2011 16:00:00 GMT-0700");
var dateStrToSendToServer = date.toISOString();
... send to C# side ...
var success = DateTimeOffset.TryParse(jsISOStr, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var result);
C# DateTime
already understands ISO date formats and will parse it just fine.
To format from C# to JS just use DateTime.UtcNow.ToString("o")
.
Personally, I'm never comfortable relying on math and logic between different environments to get the milliseconds/ticks to show the EXACT same date and time a user may see on the client (especially where it matters). I would do the same when transferring currency as well (use strings instead to be safe, or separate dollars and cents between two different integers). Sending the date/time as separate values would be just a good (see accepted answer).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With