You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Angular的请求头中传递时区偏移量?

在Angular请求头中添加时区偏移量的实现方案

要在请求头中传递时区偏移量,你可以利用JavaScript原生的Date对象获取本地时区与UTC的差值,然后将其添加到请求头中。以下是修改后的代码:

import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Injectable } from '@angular/core';
import { SessionProvider } from './session.provider';

@Injectable({ providedIn: 'root' })
export class TokenInterceptor implements HttpInterceptor {

  constructor(private provider: SessionProvider) {}

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const update = addHeaders(req, this.provider.session);
    const request = req.clone(update);
    return next.handle(request);
  }
}

function addHeaders(req: HttpRequest<any>, session: any): any {
  let headers = req.headers;
  if (session?.stationId) {
    headers = headers.set('wid', session.stationId);
  }
  if (session?.accessToken) {
    headers = headers.set('Authorization', 'Bearer ' + session.accessToken);
  }
  
  // 添加时区偏移量到请求头
  // getTimezoneOffset() 返回分钟数,是UTC相对于本地时间的偏移(东八区返回-480)
  const timezoneOffset = new Date().getTimezoneOffset();
  // 直接传递分钟数到请求头
  headers = headers.set('X-Timezone-Offset', timezoneOffset.toString());
  
  // 如果后端需要类似+08:00的格式,可替换为以下代码:
  // const offsetHours = Math.abs(timezoneOffset) / 60;
  // const offsetSign = timezoneOffset < 0 ? '+' : '-';
  // const formattedOffset = `${offsetSign}${String(offsetHours).padStart(2, '0')}:00`;
  // headers = headers.set('X-Timezone-Offset', formattedOffset);

  return { headers };
}

关键说明:

  • new Date().getTimezoneOffset():返回本地时间与UTC时间的差值(分钟),东时区返回负数,西时区返回正数(比如东八区对应-480分钟)。
  • 请求头名称:示例中用X-Timezone-Offset,你可以根据后端约定调整为合适的名称。
  • 格式适配:如果后端需要特定格式(如+08:00),可以使用注释里的代码将分钟数转为标准时区格式字符串。

这样每次发起请求时,都会自动携带当前用户的时区偏移信息到请求头中。

内容的提问来源于stack exchange,提问作者jesper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:00:58