【问题标题】:How to correctly handle db time value with json and javascript/jquery如何使用 json 和 javascript/jquery 正确处理 db 时间值
【发布时间】:2012-08-08 06:01:51
【问题描述】:

有人知道如何解析 json 时间跨度对象吗? 我想将 UTC 时间跨度返回到我的视图中,然后将其转换为本地客户端时间,但我没有找到任何有关如何执行此操作的参考。

我正在使用 mvc,所以我有这个模型:

public class TimeSpanModel
{
    public TimeSpan StartTime { get; set; }

    public TimeSpanModel()
    {
        this.StartTime = DateTime.UtcNow.TimeOfDay;

    }
}

在我的控制器中,我将此模型返回到我的视图中,如下所示:

public ActionResult GetTimeSpanInfo()
    {
        TimeSpanModel tsm= new TimeSpanModel ();
        return Json(tsm);
    }

我正在从视图中拨打这样的电话:

$.ajax({
        type: 'POST',
        url: '@Url.Content("~/Controller/GetTimeSpanInfo")',
        success: function (data) {
        alert(data.StartTime);
        var dt = new Date(data.StartTime);
        alert(dt.toString());
        }
    });

但在第一个警告框中,我只看到:[object Object] 所以我尝试将时间跨度转换为日期,但在第二个警报框中,我得到无效日期。

我是否必须将时间跨度转换为字符串,然后将该字符串与我不需要的一些奇数日期连接起来以创建“有效”日期,然后将其转换为本地时间,然后提取从那以后?

或者是否有更简单、更优雅的方式来使用 TimeSpan,或者只是日期时间值的时间部分?

感谢您的帮助。

附:仅将 UTCnow 时间转换为本地时间似乎很愚蠢,但我最终将从数据库表中获取此 UTC 时间值 - 类型 time(0)。我在上面发布的方法只是一种更短的方法,用于测试从数据库中获取该值后如何处理该值,然后在模型中设置该值。

【问题讨论】:

  • 您能否发布一个返回的 JSON 示例?时间跨度究竟应该代表什么?几秒?两个可以显示为本地日期时间的日期时间,以及它们之间的区别?

标签: json timespan


【解决方案1】:

您看到的[object Object] 是因为 TimeSpan 没有 JSON 表示,因此最简单的解决方案是使用通用格式来传递它,即毫秒。

public ActionResult GetTimeSpanInfo()
    {
        TimeSpanModel tsm= new TimeSpanModel ();
        return Json(tsm.TotalMilliseconds.ToString());
    }

并在javascript中使用Date构造函数Date(毫秒)进行解析,如下:

$.ajax({
        type: 'POST',
        url: '@Url.Content("~/Controller/GetTimeSpanInfo")',
        success: function (data) {
        alert(data);
        var dt = new Date(data);
        alert(dt.toString());
        }
    });

【讨论】:

    【解决方案2】:

    以人类可读的文化独立方式作为字符串:

    来自 Javascript

    var dateParam = aDate.toUTCString();
    

    到 C#

    DateTime aDate = DateTime.ParseExact(dateParam, "r", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);
    

    现在来自 C#

    DateTime formattedDateFromCSharp = aDate.ToString("r");
    

    到 Javascript

    var aDate = Date.parse(formattedDateFromCSharp);
    

    【讨论】:

    • 感谢您的回答。尽管我只对时间感兴趣,但我最终还是使用了完整的 DateTime 类型,因为它更容易。收到 DateTime 后,我从中提取了所需的小时/分钟值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多