与我的javascript变量相比,我的日期时间记录在我的数据库移位2小时

时间:2013-06-08 18:22:51

标签: javascript datetime timezone

每当我将日期时间保存到我的数据库中时,我清楚地看到我的数据库中有2小时的转变。

我知道这是关于UTC的事情,但我更喜欢在没有UTC的数据库中保留确切的日期。

这是我的代码:

var now = "06/08/2013 20:18"; // Eigth of june 2013
myObservable(now);

然后我检查我的数据库(sql server),我看到2013-06-08 18:18:00.000

我的问题:如何在我的sql server表中记录当前日期时间?

PS:我可以暂时使用,但我没有成功(仍有转变)。

1 个答案:

答案 0 :(得分:0)

这是我的实施:

function today() {
    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth() + 1; //January is 0!
    var h = today.getHours();
    var m = today.getMinutes();
    var yyyy = today.getFullYear();
    if (dd < 10) { dd = '0' + dd } if (mm < 10) { mm = '0' + mm } today = dd + '/' + mm + '/' + yyyy + ' ' + h + ':' + m;
    return today;
};

var now = moment.utc(today(), "DD/MM/YYYY hh:mm").toDate();
myObservable(now);

这一次,变量现在包含:Sat Jun 08 2013 23:08:00 GMT+0200 (Romance Daylight Time)

我的数据库中的值为2013-06-08 21:08:00.000

我的数据库中记录的这个值是现在的实际日期时间。


更新

要回复John,会显示一些关于浏览器究竟是什么的代码,以及它如何在服务器端代码中放入数据库

通过我自己建议的解决方案:

var now = moment.utc(today(), "DD/MM/YYYY hh:mm").toDate();
// now <- Sun Jun 9 10:40:00 UTC+0200 2013
myObservable(now);
  • 浏览器发送:2013-06-09T08:40:00Z
  • 记录在DB:2013-06-09 08:40:00.000
  • 中的日期

这是真正的约会时间。

PS:现在的时间是:08:40。


用一个简单的案例:

var now = new Date();
// now <- Sun Jun 9 08:45:54 UTC+0200 2013
myObservable(now);
  • 浏览器发送时间:2013-06-09T06:45:54.676Z
  • 以DB记录的日期:2013-06-09 06:45:54.677

与实际日期相比,此日期的移动时间为2小时。


认识到,当夏令时开始和停止时,您的本地时区偏差可能会每年更改两次....

我不需要跟踪这些时间偏移,我们的应用程序将在本地使用。

使用简单的DateTime字段很难跟踪这个模糊的小时。如果你不想存储UTC,并且你想要它准确,那么你需要使用DateTimeOffset

所以我尝试使用您建议的DateTimeOffset字段类型,结果如下:

var now = new Date();
// now <- Sun Jun 9 08:54:12 UTC+0200 2013
myObservable(now);
  • 浏览器发送:2013-06-09T06:54:12.843Z
  • 以DB记录的日期:2013-06-09 06:54:12.8430000 +00:00

与实际日期相比,此日期转移了2个小时。问题仍然存在。

使用Google Chrome和Internet Explorer进行测试。