例如,您的客户端计算机在悉尼,而您的代码部署在印度。
将日期时间保存到数据库:
在将日期时间从客户端 (JavaScript) 传递到服务器 (.NET) 时,将其作为字符串传递,以便在保存到数据库时不会转换为服务器时间 (UK)。
如果您的日期时间字段不可编辑,请遵循解决方案 1,否则解决方案 2 将是正确的选择。
从数据库中检索:
解决方案 1:
客户端代码:
cols.Bound(c => c.ExamDate)
.ClientTemplate(("#= ExamDateString #"))
.Hidden(false)
.Filterable(x => x
.Cell(cell => cell
.ShowOperators(false)
.Operator(StringOperator.eq.ToString())
)
);
服务器端代码:
格式的服务器模型属性:
public string ExamDateString
{
get
{
return ExamDate.HasValue
? ExamDate.Value.ToString("dd/MM/yyyy hh:mm:ss")
: string.Empty;
}
}
解决方案 2:
从数据库中检索:
客户端代码:
$.ajax({
type: "POST",
url: '@Url.Action("Controller action method name", "Controller name")',
data: {
"clientMachineTimeZoneOffsetInMinutes ": (new Date()).getTimezoneOffset()
},
success: function (data) {
}
});
服务器端代码:
//Server Timezone(India) Offset minutes : 330
//Client Timezone(Sydney) Offset minutes : -600
//Difference between Client and Server timezone offset minutes = -270
var serverTimeZoneOffsetInMinutes = DateTimeOffset.Now.Offset.TotalMinutes;
var serverAndClientMachineTimeZoneDifferenceInMinutes = clientMachineTimeZoneOffsetInMinutes + serverTimeZoneOffsetInMinutes;
//Update your date time field with this offset minutes
ExamDate = ExamDate.Value.AddMinutes(serverAndClientMachineTimeZoneDifferenceInMinutes);
解决方案 3:
解决方案 2 不会处理夏令时场景,这将是处理所有场景的理想解决方案。
在将控制器动作方法的DataSource结果返回给剑道网格之前,请执行以下操作以停止转换:
var response = new ContentResult
{
Content = JsonConvert.SerializeObject(value, new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Local,
DateFormatString = "yyyy-MM-ddTHH:mm:ss"
}),
ContentType = "application/json"
};
return response;