如何将Javascript datetime转换为C#datetime?

我一直在读,如果你想从JavaScript日期转换为C#日期,你应该使用getTime()然后将该结果添加到C# DateTime

假设我有这个JavaScript时间:

 Date {Tue Jul 12 2011 16:00:00 GMT-0700 (Pacific Daylight Time)} 

它呈现为1310522400000毫秒

 var a = new DateTime(1970, 01, 01).AddMilliseconds(1310522400000); // result 7/13/2011 2:00:00 AM 

所以这是错的。 我不确定我需要做什么。

首先使用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; 

将此字符串传递给codebehind函数并将其作为字符串参数接受。使用codebehind中的DateTime.ParseExact()将此字符串转换为DateTime ,如下所示,

 DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

希望这可以帮助…

你几乎是对的,只需要做一点修复:

 var a = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) .AddMilliseconds(1310522400000) .ToLocalTime(); 

您可以使用toJSON() JavaScript方法,它将JavaScript DateTime转换为C#可以识别为DateTime的内容。

JavaScript代码如下所示

 var date = new Date(); date.toJSON(); // this is the JavaScript date as ac# DateTime 

DateTime.Parse是一个更好的选择。 JS日期和C#日期不是从同一个根开始。

样品:

 DateTime dt = DateTime.ParseExact("Tue Jul 12 2011 16:00:00 GMT-0700", "ddd MMM d yyyy HH:mm:ss tt zzz", CultureInfo.InvariantCulture); 

由于我在不同的时区,我的JavaScript和C#最终在同一日期之间有2小时的差异(即使我试图将日期作为日期发送到web服务[未转换为字符串/其他对象])。

我尝试在JavaScript中使用getTime()并将毫秒添加到C#日期(从1970-01-01开始),但我总是提前两个小时在我的C#日期结束。

为了表示我会在双方获得相同的日期和时间,我最终这样做:

在JavaScript中我使用了UTC函数:

 var jsDate = Date.UTC(year,month,day,hours,minutes,seconds,millisec); 

在C#中获取正确的DateTime我做了这个:

 var date = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(jsDate); 

希望它可以帮到某人。

如果您在应用程序中使用moment.js。

var x = moment(new Date())。format(’DD / MM / YYYY hh:mm:ss’)

x传递给codebehind函数并将其作为字符串参数接受。 使用c#中的DateTime.ParseExact()将此字符串转换为DateTime,如下所示,

 DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

我想你可以使用TimeZoneInfo ….转换日期时间….

  static void Main(string[] args) { long time = 1310522400000; DateTime dt_1970 = new DateTime(1970, 1, 1); long tricks_1970 = dt_1970.Ticks; long time_tricks = tricks_1970 + time * 10000; DateTime dt = new DateTime(time_tricks); Console.WriteLine(dt.ToShortDateString()); // result : 7/13 dt = TimeZoneInfo.ConvertTimeToUtc(dt); Console.WriteLine(dt.ToShortDateString()); // result : 7/12 Console.Read(); } 

如果你在美国太平洋时区,那么你的时代是1969年12月31日下午4点。你加上自纪元以来的毫秒数

 new DateTime(1970, 01, 01) 

因为它没有时区,所以被解释为在你的时区。

将时间瞬间思考为自纪元以来的毫秒,但理解时代只是1970-01-01T00:00:00Z,没有什么不妥。

当表示为日期,没有时区时,您无法想到时间的瞬间。

如果你想从JS发送日期到C#实际上非常简单 – 如果发送UTC日期是可以接受的。

 var date = new Date("Tue Jul 12 2011 16:00:00 GMT-0700"); var dateStrToSendToServer = date.toISOString(); 

…发送到C#方……

 var success = DateTimeOffset.TryParse(jsISOStr, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var result); 

C# DateTime已经了解ISO日期格式,并将解析它。

要从C#格式化为JS,只需使用DateTime.UtcNow.ToString("o")

就个人而言,我从不习惯依赖不同环境之间的数学和逻辑来获得毫秒/刻度来显示用户在客户端上看到的完全相同的日期和时间(特别是在重要的地方)。 我也会在转移货币时这样做(使用字符串代替安全,或者在两个不同的整数之间分开美元和美分)。 将日期/时间作为单独的值发送将是一件好事(参见接受的答案 )。

JavaScript(HTML5)

 function TimeHelper_GetDateAndFormat() { var date = new Date(); return MakeValid(date.getDate()).concat( HtmlConstants_FRONT_SLASH, MakeValid(date.getMonth() + 1), HtmlConstants_FRONT_SLASH, MakeValid(date.getFullYear()), HtmlConstants_SPACE, MakeValid(date.getHours()), HtmlConstants_COLON, MakeValid(date.getMinutes()), HtmlConstants_COLON, MakeValid(date.getSeconds())); } function MakeValid(timeRegion) { return timeRegion !== undefined && timeRegion < 10 ? ("0" + timeRegion).toString() : timeRegion.toString(); } 

C#

 private const string DATE_FORMAT = "dd/MM/yyyy HH:mm:ss"; public DateTime? JavaScriptDateParse(string dateString) { DateTime date; return DateTime.TryParseExact(dateString, DATE_FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ? date : null; } 

哈伦的答案中有一些错误在下面纠正:

1)harun使用getDay() )的日期不正确应该是getDate()

2) getMonth()比实际月少一个月,所以我们应该将它增加1,如下所示

 var date = new Date(); var day = date.getDate(); // yields var month = date.getMonth() + 1; // yields month 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; 

将此字符串传递给codebehind函数并将其作为字符串参数接受。使用codebehind中的DateTime.ParseExact()将此字符串转换为DateTime ,如下所示,

 DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

这对我有用! 希望这也对你有所帮助。

JS:

  function createDateObj(date) { var day = date.getDate(); // yields var month = date.getMonth(); // yields month var year = date.getFullYear(); // yields year var hour = date.getHours(); // yields hours var minute = date.getMinutes(); // yields minutes var second = date.getSeconds(); // yields seconds var millisec = date.getMilliseconds(); var jsDate = Date.UTC(year, month, day, hour, minute, second, millisec); return jsDate; } 

JS:

 var oRequirementEval = new Object(); var date = new Date($("#dueDate").val()); 

CS:

 requirementEvaluations.DeadLine = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) .AddMilliseconds(Convert.ToDouble( arrayUpdateRequirementEvaluationData["DeadLine"])) .ToLocalTime(); 

更新 :从.NET版本4.6开始,使用DateTimeOffset结构的FromUnixTimeMilliseconds方法:

 DateTimeOffset.FromUnixTimeMilliseconds(1310522400000).DateTime 

您还可以使用Moment.js库将Js时间发送到C#:

JavaScript: var dateString = moment(new Date()).format('LLLL')

C#: DateTime.Parse(dateString);

我能够使用@Garth指出的解决方案解决问题。

 date.toJSON()