日期转换:从LINQ到JSON再到Javascript
Date conversion: From LINQ to JSON to Javascript
简而言之,在我的API控制器和使用结果的Javascript之间,Date被转换为一个可爱的NaN
我的问题是,有人建议我在哪里,也许如何修复这条长链。
步骤1:使用LINQ从数据库中检索对象
return _dbContext.Points.Where(
point => point.AccountId == account.AccountId)
.OrderBy(point => point.EarnedOn).ToList();
在这里做出任何改变似乎都是不合理的。该模型指定了一个DateTime字段,因此我们在这里实际上没有与字符串进行任何交互。
步骤2:API控制器发送响应
var points = _pointRepository.GetByUserName(userName);
return Request.CreateResponse(HttpStatusCode.OK, points);
我可以在这里指定如何解析日期吗?即使在服务器端处理也有意义吗?我想我可以循环浏览所有对象并手动设置它们,就像这样:
for (var i = 0; i < points.Count(); i++ )
{
points.ElementAt(i).EarnedOn = points.ElementAt(i).EarnedOn.ToUniversalTime();
}
但是,谈谈多重枚举!
步骤3:客户端将JSON数据解析为JS对象,然后将字符串中的Date解析为int大幅缩短可读性
var points = JSON.parse(response);
for(i = 0; i < points.length; i++){
var date = Date.parse(points[i].EarnedOn);
在这一点上,我能做的只有这么多。我已经在第2步结束时将日期转换为字符串,而我所针对的浏览器根本不知道如何使用C#的默认DateTime.toString
格式(我认为这就是发送的内容)。在一些浏览器中它是有效的,在另一些浏览器中我得到了NaN
。
很抱歉解释太长,但如果有人能指出他们将在哪里以及如何应用修复,我将不胜感激。
===更新===
有问题的浏览器是安卓的股票浏览器。我已经在我的手机和BlueStacks模拟器上测试过了。两者都是最新的,而且都不起作用。它在Chrome中确实有效。
时间的JSON输出(去掉所有其他数据)如下所示:
"EarnedOn":"2012-05-10T00:00:00"
如何将.Net中的DateTime转换为时间戳/秒。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年以来就没有提交过,而且充满了错误。此外,它只是工作不太好。
到目前为止,我已经厌倦了寻找合适的解决方案,并在步骤3中使用以下Javascript代码。
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);
...
这真的很难看,但是一个答案,所以我把它放在这里。我真的希望有人能找到比这更优雅的东西。
- 如何:浏览器将JSON发送到服务器
- 通过解析Json附加到数组
- Ajax注释将json调用到函数中
- C#JSON字符串到JavaScript数组
- 为什么从JSON文本到类型的转换不包括函数
- json数据到具有多个头的表
- 解析将数据从 JSON 发送到 Django 时出错
- 将从 URL 输出的 JSON 保存到文件 javascript
- 将错误消息 JSON 传递到另一个页面模板
- 为什么它不将 JSON 返回到浏览器
- 主干 JSON 集合到模板输出
- 如何使用Angular.js在页面上显示从JSON检索到的图像
- 如何让一个变量从一个控制器到一个js文件,再到一个渲染的分部
- 如何使用ajax jquery获取表单字段值并将其作为json发送到服务器
- 将JSON映射到observableArray时出错
- 将json传递到javascript数组中
- 日期转换:从LINQ到JSON再到Javascript
- Laravel PHP-从DB到PHP再到JS到HTML的自定义JSON对象
- 从XML到json再到javascript
- 将 JSON 数据从 Servlet 传递到 JSP 再到 JS 文件