Angular http 方法更改日期时间中的小时
Angular http method changing the hour in datetime
我遇到了有史以来最奇怪的错误。我正在通过 angularjs 与我的 API 通话,我尝试通过执行以下操作来更新某些内容
console.log('updated: ', event.startsAt);
$http({
method: 'PUT',
url: baseurl + "/event/" + event.id,
data: {title: event.title, startsAt: moment(event.startsAt).clone().toDate(), entriesAllowed: event.entriesAllowed},
headers: {'Content-type': 'application/json'},
handleError: true
})
所以问题出在event.startsAt变量上。在控制台日志中,它给了我正确的时间:
Sat Dec 24 2016 16:15:00 GMT+0100 (CET)
但是一旦我发送它并使用我的 api 访问它,它就会给出相同的日期时间但减去 1 小时所以
Sat Dec 24 2016 15:15:00 GMT+0100 (CET)
知道这是什么吗?我使用 laravel 作为我的 api 并且我使用
获取日期时间
$event->startsAt = Carbon::parse($request->get('startsAt'), 'Europe/Amsterdam');
我自己尝试过的东西
- 使用 momentJS 将日期时间更改为不同的格式。
- adding/removing 时区 Laravel.
你的 API 运行 和你的 angular 应用在同一台机器上吗?如果不是,你也许应该检查那台机器的系统时间。
否则你应该尝试与邮递员相同的请求来隔离错误。如果 postman 的 bug 仍然存在,那么你的 api 有问题,如果 postman 的 bug 消失了,你的 angular 就有问题了。虽然我很难想象你在 angular 方面会做错什么。
编辑:
刚刚有了另一个想法。尝试 console.log(moment(event.startsAt).clone().toDate())
真正记录您发送到服务器的内容。也许 "toDate()" 弄错了缺少时区信息的原因。
假设event.startsAt
是一个Date
对象,那么你应该先将它序列化为ISO8601格式。
先尝试 event.startsAt.toISOString()
。这也将转换为 UTC,但您应该能够在服务器上轻松处理。
如果出于某种原因您需要保留原始时区偏移,moment 可以帮助您使用 moment(event.startsAt).format()
我遇到了有史以来最奇怪的错误。我正在通过 angularjs 与我的 API 通话,我尝试通过执行以下操作来更新某些内容
console.log('updated: ', event.startsAt);
$http({
method: 'PUT',
url: baseurl + "/event/" + event.id,
data: {title: event.title, startsAt: moment(event.startsAt).clone().toDate(), entriesAllowed: event.entriesAllowed},
headers: {'Content-type': 'application/json'},
handleError: true
})
所以问题出在event.startsAt变量上。在控制台日志中,它给了我正确的时间:
Sat Dec 24 2016 16:15:00 GMT+0100 (CET)
但是一旦我发送它并使用我的 api 访问它,它就会给出相同的日期时间但减去 1 小时所以
Sat Dec 24 2016 15:15:00 GMT+0100 (CET)
知道这是什么吗?我使用 laravel 作为我的 api 并且我使用
获取日期时间$event->startsAt = Carbon::parse($request->get('startsAt'), 'Europe/Amsterdam');
我自己尝试过的东西
- 使用 momentJS 将日期时间更改为不同的格式。
- adding/removing 时区 Laravel.
你的 API 运行 和你的 angular 应用在同一台机器上吗?如果不是,你也许应该检查那台机器的系统时间。
否则你应该尝试与邮递员相同的请求来隔离错误。如果 postman 的 bug 仍然存在,那么你的 api 有问题,如果 postman 的 bug 消失了,你的 angular 就有问题了。虽然我很难想象你在 angular 方面会做错什么。
编辑:
刚刚有了另一个想法。尝试 console.log(moment(event.startsAt).clone().toDate())
真正记录您发送到服务器的内容。也许 "toDate()" 弄错了缺少时区信息的原因。
假设event.startsAt
是一个Date
对象,那么你应该先将它序列化为ISO8601格式。
先尝试 event.startsAt.toISOString()
。这也将转换为 UTC,但您应该能够在服务器上轻松处理。
如果出于某种原因您需要保留原始时区偏移,moment 可以帮助您使用 moment(event.startsAt).format()