0

因此,我正在尝试向 API 发出发布请求,并且所需的值之一是根据那里的文档应采用以下格式的日期

Start time of the timesheet, in ISO 8601 format 
(YYYY-MM-DDThh:mm:ss±hh:mm). Time should reflect the user's local time.

但是当我尝试以new Date().toISOString()ISO 格式创建一个值时,我得到了这个

2019-07-17T19:50:08.057Z

所以我想我的问题是,我怎样才能产生他们正在寻找的假定格式,它显然是不同的 ISO 8601 格式?或者以下时间戳的格式是什么?

2018-07-25T13:10:23-07:00

这是我正在使用的 api 的文档https://tsheetsteam.github.io/api_docs/#create-timesheets

4

3 回答 3

0

您的问题类似于ISO 之类的 Javascript 日期格式,但是是本地的,但您也需要时区,所以:

function toISOLocal(date) {

  // Pad single digit numbers with leading zero
  function z(n){return (n<10?'0':'')+n}

  // Copy the input date
  var d = new Date(date);

  // Get offset and adjust
  var offset = d.getTimezoneOffset();
  d.setMinutes(d.getMinutes() - offset);

  // Build timestamp with adjusted date and local offset
  var sign = offset < 0? '+' : '-';
  offset = Math.abs(offset);
  var offsetStr = sign + z(offset/60|0) + ':' + z(offset%60);

  return d.toISOString().replace(/z$/i, offsetStr);
}

console.log(toISOLocal(new Date()));

但是,我怀疑您可以使用内置的toISOString,只需将尾随 Z 替换为 +00:00。您可能还需要删除小数秒部分:

function modifyISO(d) {
  return d.toISOString().replace(/\.\d+/, '').replace(/z$/i,'+00:00');
}

console.log(modifyISO(new Date()));

于 2019-07-17T20:54:36.750 回答
0

只去掉尾巴。像这样的东西。

console.log(new Date().toISOString().replace(/(.+)(\..+?$)/g,'$1'));

于 2019-07-17T20:11:37.170 回答
0

您需要设置位置时间来参考经络 0 + 或 - ,您可以使用诸如momentjs 之类的库进行设置,基本上您设置一个参考来比较

var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00
于 2019-07-17T20:17:31.193 回答