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; }