C# 日期转换:从LINQ到JSON再到Javascript
简而言之,在我的API控制器和使用结果的Javascript之间,日期被转换为一个日期 我的问题是,有人建议我在哪里以及如何修复这条长链 步骤1:使用LINQ从数据库检索对象 在这里做任何改变似乎都是不合理的。该模型指定了一个DateTime字段,因此我们实际上没有与字符串进行任何交互 步骤2:API控制器发送响应 我可以在这里指定如何解析日期吗?甚至在服务器端进行处理都有意义吗?我想我可以遍历所有对象并手动设置它们,如下所示:C# 日期转换:从LINQ到JSON再到Javascript,c#,javascript,json,datetime,formatting,C#,Javascript,Json,Datetime,Formatting,简而言之,在我的API控制器和使用结果的Javascript之间,日期被转换为一个日期 我的问题是,有人建议我在哪里以及如何修复这条长链 步骤1:使用LINQ从数据库检索对象 在这里做任何改变似乎都是不合理的。该模型指定了一个DateTime字段,因此我们实际上没有与字符串进行任何交互 步骤2:API控制器发送响应 我可以在这里指定如何解析日期吗?甚至在服务器端进行处理都有意义吗?我想我可以遍历所有对象并手动设置它们,如下所示: for (var i = 0; i < points.Co
for (var i = 0; i < points.Count(); i++ )
{
points.ElementAt(i).EarnedOn = points.ElementAt(i).EarnedOn.ToUniversalTime();
}
如何将.Net中的日期时间转换为时间戳/秒。JavaScript中到日期对象的转换。不过,我还没有在移动浏览器上测试过它,所以不能保证它100%都能工作
DateTime myDateTime = new DateTime(2012, 01, 17, 9, 30, 0);
long ticks = (myDateTime - DateTime.Parse("01/01/1970 00:00:00")).Ticks;
ticks /= 10000000; //Convert ticks to seconds
var timestamp = ticks.ToString();
然后在JavaScript中,类似
secsToTime = function(theSecs)
{
var date = new Date(theSecs*1000);
// hours part from the timestamp
var hours = date.getHours();
// minutes part from the timestamp
var minutes = date.getMinutes();
// seconds part from the timestamp
var seconds = date.getSeconds();
// will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes + ':' + seconds;
alert(formattedTime);
}
secsToTime(1326792600);
我最初说我会使用Date.js,但谷歌搜索显示,自2007年以来,Date.js就再也没有提交过,而且还存在很多漏洞。除此之外,它只是工作不太正常 到目前为止,我已经厌倦了寻找合适的解决方案,并在第3步中使用了下面的Javascript代码
这真的很难看,但这是一个答案,所以我把它放在这里。我真的希望有人能来找比这更优雅的东西。这似乎很奇怪。您的目标浏览器是什么,JSON实际上是什么样子的?你能把它贴出来吗?至少日期表示。@aquinas更新了“我的问题”以回答您的问题,这表明只有更新的浏览器才能识别所讨论的格式,这可能是这里的问题所在。他忽略了在列表上显示移动浏览器,可能需要检查-注意日期文字末尾的尾随Z。看起来你可能也必须这么做。从技术上来说,我喜欢这个解决方案,因为它不会留下任何误解的余地,但我在哪里可以这样做呢?在我从LINQ那里拿到名单之后?我觉得再重复一遍这个列表很傻,但是如果LINQ本身没有办法做到这一点,我想我没有选择了系统的架构是什么?是实体框架吗?在将模型返回给客户端之前,是否将其转换为ViewModel?我使用的是实体框架,但我不倾向于将ViewModels用于API JSON请求。这种做法不好吗?在我的原始帖子的第2步中,你可以看到我发送请求的方式,这实际上取决于需求,例如,你可能有无法传输给客户的敏感数据。通常,我使用AutoMapper将视图模型投影到视图中,以减少发送到客户端的数据量。或者,如果希望保持原样,则在模型中有一个额外的属性,而不是映射到EF,该属性是一个以秒为单位的字符串,并使用循环更新该属性,然后将其用于客户端。
var points = JSON.parse(response);
for(i = 0; i < points.length; i++){
var date = Date.parse(points[i].EarnedOn);
"EarnedOn":"2012-05-10T00:00:00"
DateTime myDateTime = new DateTime(2012, 01, 17, 9, 30, 0);
long ticks = (myDateTime - DateTime.Parse("01/01/1970 00:00:00")).Ticks;
ticks /= 10000000; //Convert ticks to seconds
var timestamp = ticks.ToString();
secsToTime = function(theSecs)
{
var date = new Date(theSecs*1000);
// hours part from the timestamp
var hours = date.getHours();
// minutes part from the timestamp
var minutes = date.getMinutes();
// seconds part from the timestamp
var seconds = date.getSeconds();
// will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes + ':' + seconds;
alert(formattedTime);
}
secsToTime(1326792600);
function parseDate(date){
var year = parseInt(date.substring(0,4));
var month = parseInt(date.substring(5,7));
var day = parseInt(date.substring(8,10));
var hour = parseInt(date.substring(11,13));
var minute = parseInt(date.substring(14,16));
var second = parseInt(date.substring(17,19));
return new Date(year, month, day, hour, minute, second);
}
for(i = 0; i < points.length; i++){
var date = Date.parse(points[i].EarnedOn);
...