【发布时间】: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