3

每次我将日期时间保存到数据库中时,我都会清楚地看到数据库中有 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:我可以使用时刻,但我没有成功(仍然有一个转变)。

4

1 回答 1

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 测试。

于 2013-06-08T19:09:46.873 回答