如何忽略javascript时区向服务器发送日期时间

时间:2017-11-15 10:07:31

标签: javascript angular datetime datepicker timezone

我正在构建一个使用c#和angular来存储事件计划的Web应用程序。用户将输入以UTC为单位的日期时间,并且我希望将该时间完全按照输入保存在db中。然后在用户查看此信息时显示完全相同的时间。这不应该取决于用户的时区,我告诉用户时间是UTC。

但问题是当ajax发布到服务器和服务器时,浏览器发送带有时区信息的时间信息,因为服务器位于不同的时区,在db中保存不同的时间(通过转换自己的时区)。

如何防止这种情况?

3 个答案:

答案 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;
}