【问题标题】:@grid MVC convert date to local timezone@grid MVC 将日期转换为本地时区
【发布时间】:2014-03-16 14:30:54
【问题描述】:

我有一个 MVC 网格,它显示了存储在数据库中的事务。其中一列是日期,该日期以 UTC 格式存储,显示时我需要将其转换为浏览器时区。

@grid.GetHtml(        
        htmlAttributes: new { id = "transactionsGrid" },       
        columns:grid.Columns(
                grid.Column("TransactionDate", ((grid.SortColumn == "TransactionDate" ? (grid.SortDirection == SortDirection.Ascending ? "▲ " : "▼ ") : "") + "Date"), style: "TransactionDate")
        )

我怎样才能做到这一点?我怎么能用 javascript 做到这一点,因为它应该在客户端处理。

提前致谢。

已编辑

我想出了怎么做:

@grid.GetHtml(        
        htmlAttributes: new { id = "transactionsGrid" },       
        columns:grid.Columns(
        grid.Column("TransactionDate", ((grid.SortColumn == "TransactionDate" ? (grid.SortDirection == SortDirection.Ascending ? "▲ " : "▼ ") : "") + "Date"), style: "TransactionDate", format: (item) => new HtmlString("<div name='date' data-datetime='"+item.TransactionDate+"'>"+item.TransactionDate+"</div>"))

这是javascript代码:

function convertUTCDateToLocalDate(date) {
        var newDate = new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
        var offset = date.getTimezoneOffset() / 60;
        var hours = date.getHours();
        newDate.setHours(hours - offset);
        return newDate;
    }

    Date.prototype.format = function (format) {
        var o = {
            "M+": this.getMonth() + 1, //month
            "d+": this.getDate(),    //day
            "h+": this.getHours(),   //hour
            "m+": this.getMinutes(), //minute
            "s+": this.getSeconds(), //second
            "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
            "S": this.getMilliseconds() //millisecond
        }

        if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
          (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o) if (new RegExp("(" + k + ")").test(format))
            format = format.replace(RegExp.$1,
              RegExp.$1.length == 1 ? o[k] :
                ("00" + o[k]).substr(("" + o[k]).length));
        return format;
    }
    $("div[name=date]").each(function () {
        var myDate = new Date($(this).data("datetime"));
        var convertToLocalDate = convertUTCDateToLocalDate(myDate);
        $(this).text(convertToLocalDate.format("MM/dd/yyyy hh:mm:ss"));
    });

【问题讨论】:

  • 您应该考虑将您的解决方案添加为答案,然后将其标记为完成这篇文章。
  • 哇...这是很多工作.. 如果这在网格本身上是可能的,那就更好了!

标签: javascript asp.net-mvc date gridview


【解决方案1】:

我想出了办法:

@grid.GetHtml(        
        htmlAttributes: new { id = "transactionsGrid" },       
        columns:grid.Columns(
        grid.Column("TransactionDate", ((grid.SortColumn == "TransactionDate" ? (grid.SortDirection == SortDirection.Ascending ? "▲ " : "▼ ") : "") + "Date"), style: "TransactionDate", format: (item) => new HtmlString("<div name='date' data-datetime='"+item.TransactionDate+"'>"+item.TransactionDate+"</div>"))

这是javascript代码:

function convertUTCDateToLocalDate(date) {
        var newDate = new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
        var offset = date.getTimezoneOffset() / 60;
        var hours = date.getHours();
        newDate.setHours(hours - offset);
        return newDate;
    }

    Date.prototype.format = function (format) {
        var o = {
            "M+": this.getMonth() + 1, //month
            "d+": this.getDate(),    //day
            "h+": this.getHours(),   //hour
            "m+": this.getMinutes(), //minute
            "s+": this.getSeconds(), //second
            "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
            "S": this.getMilliseconds() //millisecond
        }

        if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
          (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o) if (new RegExp("(" + k + ")").test(format))
            format = format.replace(RegExp.$1,
              RegExp.$1.length == 1 ? o[k] :
                ("00" + o[k]).substr(("" + o[k]).length));
        return format;
    }
    $("div[name=date]").each(function () {
        var myDate = new Date($(this).data("datetime"));
        var convertToLocalDate = convertUTCDateToLocalDate(myDate);
        $(this).text(convertToLocalDate.format("MM/dd/yyyy hh:mm:ss"));
    });

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2014-01-28
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多