DateTime到JavaScriptdate

从Stackoverflow的另一个答案是从JavaScriptdate转换为.netdate时间:

long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000); 

但如何做相反的? DateTime到Javascriptdate?

谢谢,

AJ

尝试:

 return DateTime.Now.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds 

编辑:真正的UTC比较好,但是我们需要保持一致

 return DateTime.UtcNow .Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc)) .TotalMilliseconds; 

虽然,只要两个date都在同一个时区,再想一想也没有关系。

JavaScriptdate构造函数接受自Unix纪元(1970年1月1日00:00:00 UTC)以来的毫秒数。 下面是将.Net DateTime对象转换为JavaScriptdate的C#扩展方法:

 public static class DateTimeJavaScript { private static readonly long DatetimeMinTimeTicks = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks; public static long ToJavaScriptMilliseconds(this DateTime dt) { return (long)((dt.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 10000); } } 

JavaScript用法:

 var dt = new Date(<%= DateTime.Today.ToJavaScriptMilliseconds() %>); alert(dt); 

随着Moment.js只需使用:

 var jsDate = moment(netDateTime).toDate(); 

netDateTime是你的date时间variables序列化,如"/Date(1456956000000+0200)/"

这应该做的伎俩:

 date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds 

你可以在你的Action里试试这个:

 return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); 

而这个在你的Ajax成功之处:

 success: function (resultDateString) { var date = new Date(resultDateString); } 

或者在你的视图中:(Javascript加上C#)

 var date = new Date('@DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")'); 

我知道这有点晚了,但是这里是我不得不提出的处理date,当你想成为时区独立的解决scheme。 基本上它涉及到一切转换为UTC。

从Javascript到服务器

以删除时区偏移量的纪元值forms发送date。

 var d = new Date(2015,0,1) // Jan 1, 2015 // Ajax Request to server ... $.ajax({ url: '/target', params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) } }); 

服务器然后接收1420070400000作为date。

在服务器端,将该纪元值转换为date时间对象:

 DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch); 

此时date只是用户提供的date/时间。 实际上是UTC。

走另一条路

当服务器从数据库中提取数据时,大概以UTC为单位,将差异作为时期(确保两个date对象都是本地或UTC):

 long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; 

要么

 long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds; 

当javascript收到这个值时,创build一个新的date对象。 但是,这个date对象将被假定为当地时间,所以您需要在当前时区抵消它:

 var epochValue = 1420070400000 // value pulled from server. var utcDateVal = new Date(epochValue); var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000)) console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time) console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time) 

据我所知,这应该适用于任何时区,你需要显示与时区无关的date。

如果你用剃刀使用MVC

—–剃刀/ C#

 var dt1 = DateTime.Now.AddDays(14).Date; var dt2 = DateTime.Now.AddDays(18).Date; var lstDateTime = new List<DateTime>(); lstDateTime.Add(dt1); lstDateTime.Add(dt2); 

—使用Javascript

 $(function() { var arr = []; //javascript array @foreach (var item in lstDateTime) { @:arr1.push(new Date(@item.Year, @(item.Month - 1), @item.Day)); } 
  • 1:在C#中创build列表并填充它
  • 2:在javascript中创build一个数组
  • 3:使用razor迭代列表
  • 4:使用@:切换回js和@切换到C#
  • 5:月份中的-1来更正js中的月份数量。

祝你好运

 <input type="hidden" id="CDate" value="<%=DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")%>" /> 

为了将date转换为JSdate(所有数字):

 var JSDate = $("#CDate").val(); JSDate = Date.parse(JSDate); 

这个方法正在为我工​​作:

  public sCdateToJsDate(cSDate: any): Date { // cSDate is '2017-01-24T14:14:55.807' var datestr = cSDate.toString(); var dateAr = datestr.split('-'); var year = parseInt(dateAr[0]); var month = parseInt(dateAr[1])-1; var day = parseInt(dateAr[2].substring(0, dateAr[2].indexOf("T"))); var timestring = dateAr[2].substring(dateAr[2].indexOf("T") + 1); var timeAr = timestring.split(":"); var hour = parseInt(timeAr[0]); var min = parseInt(timeAr[1]); var sek = parseInt(timeAr[2]); var date = new Date(year, month, day, hour, min, sek, 0); return date; }