这是我的实现:
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 测试。