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');

我自己尝试过的东西

你的 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()