C# 日期时间到javascript日期
Stackoverflow的另一个答案是从Javascript日期到.net日期时间的转换:C# 日期时间到javascript日期,c#,.net,javascript,C#,.net,Javascript,Stackoverflow的另一个答案是从Javascript日期到.net日期时间的转换: long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000); 但反过来怎么做呢?DateTime到Javascript日期?试试: return DateTime.Now
long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000);
但反过来怎么做呢?DateTime到Javascript日期?试试:
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.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds
JavaScript日期构造函数接受自Unix纪元(1970年1月1日00:00:00 UTC)以来的毫秒数。下面是将.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);
var dt=新日期();
警报(dt);
我知道这有点晚了,但当你想独立于时区时,我必须想出一个解决方案来处理日期。本质上,它涉及将所有内容转换为UTC
从Javascript到服务器:
将日期作为删除时区偏移的历元值发送
var d=新日期(2015,0,1)//2015年1月1日
//对服务器的Ajax请求。。。
$.ajax({
url:“/target”,
参数:{date:d.getTime()-(d.getTimezoneOffset()*60*1000)}
});
然后服务器接收1420070400000作为日期
在服务器端,将该历元值转换为datetime对象:
DateTime d=newdatetime(1970,1,1,0,0,0).add毫秒(历元);
此时,日期只是用户提供的日期/时间。实际上是UTC
走另一条路:
当服务器从数据库中提取数据时(可能是UTC),将差异作为一个历元(确保两个日期对象都是本地或UTC):
long ms=(long)utcDate.Subtract(新日期时间(1970,1,1,0,0,0,DateTimeKind.Utc)).total毫秒;
或
long ms=(long)localDate.Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Local)).total毫秒;
当javascript收到这个值时,创建一个新的日期对象。但是,此日期对象将假定为本地时间,因此需要按当前时区对其进行偏移:
var epochValue=1420070400000//从服务器中提取的值。
var utcDateVal=新日期(epochValue);
var actualDate=新日期(utcDateVal.getTime()+(utcDateVal.getTimezoneOffset()*60*1000))
console.log(utcDateVal);//2014年12月31日星期三19:00:00 GMT-0500(东部标准时间)
console.log(实际日期);//2015年1月1日星期四00:00:00 GMT-0500(东部标准时间)
据我所知,这适用于任何需要显示独立于时区的日期的时区。您可以在操作中尝试:
return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");
这就是Ajax成功的原因:
success: function (resultDateString) {
var date = new Date(resultDateString);
}
或者在您看来:(Javascript加上C#)
简单使用:
var jsDate = moment(netDateTime).toDate();
其中,
netDateTime
是序列化的DateTime变量,类似于“/Date(1456956000000+0200)/”
此方法适用于我:
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与razor一起使用 -----剃刀/C#
- 1:用C#创建列表并填充
- 2:在javascript中创建一个数组
- 3:使用razor迭代列表
- 4:使用@:切换回js,使用@切换到C#
- 5:月中的-1用于更正js中的月数
祝你好运又一个迟来的答案,但这里没有这个。如果要在javascript中处理序列化的
/Date(1425408717000)/
的转换,只需调用:
var cSharpDate = "/Date(1425408717000)/"
var jsDate = new Date(parseInt(cSharpDate.replace(/[^0-9 +]/g, '')));
来源:您可能希望使用DateTime.UtcNow而不是DateTime.now关于您的第二个想法:在夏时制前后的过渡期间,这确实很重要(我总是很难记住哪个:)。在转换过程中,2:00到3:00的时间重复两次。这意味着在一个小时内,javascript日期将关闭一个小时。UTC没有DLS,所以它没有这个问题。我这里有相同的代码,但它使javascript日期相差5:30,而C#date工作正常。在类似这样的问题中,显然与ajax相关,您应该指定在哪里进行转换,考虑到JSON中没有日期序列化的标准,并且您可能正在处理MS date munging,例如/date(020202)/请确保也清楚这一点。幸运的是,你应该把你所指的答案链接到我的最简单、最容易理解的答案上。这是一个答案,但是,糟糕。我不推荐。两个黑客不等于一个权利。微软的序列化是一种令人厌恶的黑客行为。@Suncat2000这种黑客行为怎么样?若您使用的是从服务器到前端检索价值的服务,我不知道还有什么更好的选择。这是本页上问题的最干净的解决方案。如果您知道更好的替代方案,请给我们举个例子:C#用法long date=DateTimeJavaScript.tojavascriptmillides(DateTime);签入javascript(在Google Chrome中按F12并转到控制台)var date=新日期(长);log(date.toString());为什么不仅仅是JavaScript构造函数
新日期(netDateTime)
?
var jsDate = moment(netDateTime).toDate();
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;
}
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);
$(function() {
var arr = []; //javascript array
@foreach (var item in lstDateTime)
{
@:arr1.push(new Date(@item.Year, @(item.Month - 1), @item.Day));
}
var cSharpDate = "/Date(1425408717000)/"
var jsDate = new Date(parseInt(cSharpDate.replace(/[^0-9 +]/g, '')));