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

cho*_*bo2 49 .net javascript c# datetime

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

假设我有这个JavaScript时间:

Date {Tue Jul 12 2011 16:00:00 GMT-0700 (Pacific Daylight Time)}
Run Code Online (Sandbox Code Playgroud)

它渲染到1310522400000毫秒

var a = new DateTime(1970, 01, 01).AddMilliseconds(1310522400000);

// result
7/13/2011 2:00:00 AM
Run Code Online (Sandbox Code Playgroud)

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

Gar*_*rth 38

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

JavaScript代码看起来像这样

var date = new Date();
date.toJSON(); // this is the JavaScript date as a c# DateTime
Run Code Online (Sandbox Code Playgroud)

  • @MHanif - 我相信 if 是因为 .toJSON() 采用 UTC 时间 (3认同)
  • @MHanif 在服务器端 UTC 时间,您可以使用 .ToLocalTime() 轻松转换为本地时间 https://learn.microsoft.com/en-us/dotnet/api/system.datetime.tolocaltime?view=net-5.0 (2认同)

Har*_*run 29

首先使用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; 
Run Code Online (Sandbox Code Playgroud)

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

DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...

  • 很多错误.请重新访问http://www.w3schools.com/jsref/jsref_obj_date.asp (6认同)
  • 不推荐使用getYear.使用.getFullYear (4认同)
  • 如果javascript只返回一个数字,你应该在前面添加一个"0".为此你应该使用"HH.length()","mm.length()"等....并相应地构造字符串(var Time). (3认同)
  • 使用getDate()getDay()返回星期几(索引) (3认同)
  • 此外,getMonth()在javascript中从零开始,因此您将在7月获得6,这将导致C#中的错误月份 (3认同)

小智 28

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

var a = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    .AddMilliseconds(1310522400000)
    .ToLocalTime();
Run Code Online (Sandbox Code Playgroud)


Jam*_*ins 8

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

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

...发送到 C# 端 ...

var success = DateTimeOffset.TryParse(jsISOStr, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out var result);
Run Code Online (Sandbox Code Playgroud)

C#DateTime已经理解 ISO 日期格式,并且会很好地解析它。

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

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


Mrc*_*ief 6

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);
Run Code Online (Sandbox Code Playgroud)

  • 你的意思是你无法将JS`Date`作为`string`序列化为已知格式(如`Date.toUTCString()`并将其发送到你的MVC动作?你能发布你的ajax代码吗? (3认同)

Raf*_*lin 5

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

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

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

在 JavaScript 中,我使用了 UTC 函数:

var jsDate = Date.UTC(year,month,day,hours,minutes,seconds,millisec);
Run Code Online (Sandbox Code Playgroud)

在 C# 中,为了获得正确的 DateTime,我这样做了:

var date = new DateTime(1970, 1, 1, 0, 0, 0, 0).AddMilliseconds(jsDate);
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人。


rag*_*aga 5

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

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

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

DateTime.ParseExact(YourString, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)