我正在构建一个使用c#和angular来存储事件计划的Web应用程序。用户将输入以UTC为单位的日期时间,并且我希望将该时间完全按照输入保存在db中。然后在用户查看此信息时显示完全相同的时间。这不应该取决于用户的时区,我告诉用户时间是UTC。
但问题是当ajax发布到服务器和服务器时,浏览器发送带有时区信息的时间信息,因为服务器位于不同的时区,在db中保存不同的时间(通过转换自己的时区)。
如何防止这种情况?
答案 0 :(得分:3)
我不确定你是如何格式化的。但我认为你可以使用momentjs,以防你不想使用任何自定义解决方案。以下代码应该可以使用
时刻(your_date_time)。格式('YYYY-MM-DD HH:mm:ss')
如果your_date_time有时区,则以下内容应该有效
时刻()。utc()。格式('YYYY-MM-DD HH:mm:ss')
答案 1 :(得分:2)
因此,如果您使用的是html5日期时间,则可以将其更改为datetime-local
<input type="datetime-local">
这将为您提供没有时区信息的日期时间。
这是一个例子。
var dateControl = document.querySelector('input[type="datetime-local"]');
dateControl.value = '2017-06-01T08:30';
let btn = document.getElementById('btns');
let inp = document.getElementById('party');
let dv = document.getElementById('displayValue');
btn.addEventListener('click', ()=>{
dv.innerText = inp.value;
});
<label for="party">Enter a date and time for your party booking:</label>
<input id="party" type="datetime-local" name="partydate" value="2017-06-01T08:30">
<button type="submit" id="btns">Check Value</button>
<div id="displayValue">
</div>
代码段只是为了让您了解如何使用datetime-local。 如果您使用的是角度2/4,则可以直接将ngModel绑定到变量,就像通常用来获取值一样。
答案 2 :(得分:2)
如果您使用.Net Web API作为后端,则可以在Web API WebApiconfig.cs中配置时区,如下所示。它将以UTC格式化时间。
public static void Register(HttpConfiguration config)
{
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
}