c# - 日期转换: From LINQ to JSON to Javascript

标签 c# javascript json datetime formatting

简而言之,在我的 API Controller 和使用结果的 Javascript 之间,日期被转换为可爱的 NaN

我的问题是,有人建议我在哪里或者如何修复这条长链。

第 1 步:使用 LINQ 从数据库检索对象

return _dbContext.Points.Where(
    point => point.AccountId == account.AccountId)
    .OrderBy(point => point.EarnedOn).ToList();

在这里进行任何更改似乎不合理。该模型指定了一个 DateTime 字段,因此我们实际上没有与这里的字符串进行任何交互。

第 2 步:API Controller 发送响应

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

抱歉这么长的解释,但如果有人能指出他们将在哪里以及如何应用修复程序,我将不胜感激。

====更新====

有问题的浏览器是 Android 的原生浏览器。我已经在我的手机和 BlueStacks 模拟器中对此进行了测试。两者都是最新的,并且都不起作用。它确实可以在 Chrome 中运行。

当时的 JSON 输出(删除所有其他数据)如下:

"EarnedOn":"2012-05-10T00:00:00" 

最佳答案

如何将.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);

关于c# - 日期转换: From LINQ to JSON to Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526974/

相关文章:

c# - 如何在单元测试 Web API 中使用匿名类型结果进行断言?

JavaScript 未在页面上应用

json - JSON MapReduce 错误

c# - 在 C# 中创建 JSON 输出文件

c# - 不用 Crystal 报表设计器创建rpt文件

c# - 在 IIS7 中不起作用的 HttpModule

c# - 删除 NHibernate 中的多对多关联

javascript - 如何使用 'hover' 选择器和 ':has()' 选择比子元素高几层的父元素?

javascript - 使用Ajax在输入时提交Textarea,然后渲染部分内容而不刷新整个页面

ios - 在 Objective-C 中解析 JSON 中的 JSON