【问题标题】:Javascript UTC Date different valuesJavascript UTC日期不同的值
【发布时间】:2021-07-24 14:08:28
【问题描述】:

我有一个 dd.mm.yyyy 格式的日期

我使用函数将此日期转换为 MM-DD-YYYY

stringToStringDateFormat(objectData: any): string {
    return moment(objectData, 'DD.MM.YYYY').format('MM-DD-YYYY');
}

我想将小时分钟和秒设置为 0 广告以 ISO 格式发送日期,所以我使用了以下代码:

new Date(new Date(this.stringToStringDateFormat("19.07.2021")).setUTCHours(0,0,0,0)).toISOString();

但我遇到的问题是我有不同的一天 例如在这种情况下,我得到 2021-07-18T00:00:00.000Z 而实际上应该是 2021-07-19T00:00:00.000Z

我怎样才能让我的代码得到我提供的相同日期而不是日期 -1?

【问题讨论】:

  • this.stringToStringDateFormat("19.07.2021") 返回的日期是什么时候。可能是一个问题,它考虑了您当地的时区并返回,例如2021-07-18 T23:00:00Z2021-07-19 0:00:00 UTC-1.
  • 不,该函数仅更改格式并返回“07-19-2021”
  • 为什么要使用 moment 进行如此简单的字符串操作?只需拆分它并直接创建一个UTC日期。
  • @R0b0t0 那么你的代码是如何工作的呢?这意味着您在应该出错的字符串上调用.setUTCHours(0,0,0,0)。似乎括号通常不匹配,并且由于某种原因您使用了 Date 构造函数两次?
  • @KelvinSchoofs 我添加了缺少的括号

标签: javascript typescript date


【解决方案1】:

这里使用Date.UTC() 并调整月份以考虑零索引。

const [d, m, y] = `19.07.2021`.split('.').map(Number);

console.log(new Date(Date.UTC(y, (m - 1), d)).toISOString()); // months are 0 indexed

【讨论】:

  • .map(Number) 的使用是多余的,将 dmy 保留为字符串即可。 :-)
  • 真的!但我想我会很明确。 ;)
【解决方案2】:

创建了一个新函数,将小时、分钟、秒和毫秒设置为 0,并以正确的格式返回日期字符串。有关我使用的方法的更详细信息,请参阅this 答案。

function stringToStringDateFormatStartDay(objectData) {
  const newD = moment(objectData, "DD.MM.YYYY").utcOffset(0).set({
    hour: 0,
    minute: 0,
    second: 0,
    millisecond: 0
  });
  newD.toISOString();
  newD.format("MM-DD-YYYY");
  return newD;
}

const d = stringToStringDateFormatStartDay("19.07.2021");
console.log(d)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

【讨论】:

    【解决方案3】:

    使用库进行解析以创建临时不受支持的格式,然后使用内置解析器进行解析不是一个好主意。

    如果您只想将 dd.mm.yyyy 重新格式化为 yyyy-mm-ddT00:00:00Z 则只需重新格式化字符串,无需转换为 Date 对象或使用库:

    function reformatTimestamp(s) {
      return `${s.split(/\D/).reverse().join('-')}T00:00:00Z`;
    }
    
    console.log(reformatTimestamp('19.07.2021'));

    【讨论】:

      猜你喜欢
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      相关资源
      最近更新 更多