从Stackoverflow的另一个答案是从Javascript日期到.net DateTime的转换:
long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000);
但是,如何做到相反呢?DateTime到Javascript日期?
从Stackoverflow的另一个答案是从Javascript日期到.net DateTime的转换:
long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000);
但是,如何做到相反呢?DateTime到Javascript日期?
Answers:
尝试:
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;
虽然,再考虑也没关系,只要两个日期都在同一时区即可。
JavaScript Date构造函数接受自Unix纪元(1970年1月1日UTC:00)以来的毫秒数。这是将.Net DateTime对象转换为JavaScript日期的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);
您可以在“操作”中尝试以下操作:
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")');
我知道这有点晚了,但是当您想要不受时区限制时,这是我不得不想出的解决日期的解决方案。本质上,它涉及将所有内容转换为UTC。
从Javascript到Server:
发送日期作为纪元值,并去除时区偏移。
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作为日期时期。
在服务器端,将该纪元值转换为日期时间对象:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
此时,日期仅是用户提供日期/时间时提供的日期/时间。实际上,它是UTC。
走另一条路:
当服务器从数据库中提取数据时(大概是UTC),请以一个纪元来区别(确保两个日期对象都为本地或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收到此值时,请创建一个新的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)
据我所知,这应该适用于您需要显示与时区无关的日期的任何时区。
此方法对我有用:
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;
}
如果您将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));
}
祝好运
另一个较晚的答案,但是这里没有。如果要处理/Date(1425408717000)/使用javascript 进行序列化的转换,只需调用:
var cSharpDate = "/Date(1425408717000)/"
var jsDate = new Date(parseInt(cSharpDate.replace(/[^0-9 +]/g, '')));
资料来源:amirsahib