【问题标题】:convert local time to utc and add to utc datetime moment将本地时间转换为 UTC 并添加到 UTC 日期时间时刻
【发布时间】:2018-08-21 02:54:03
【问题描述】:

我有一个用户输入,用户输入年、月和日,然后我创建了一个日期对象

  let userDate = new Date(year, month, day)

然后从用户输入分钟和小时的用户输入(进入变量分钟和小时)

我需要使用 moment 将此日期和时间转换为 UTC 时间戳,但我不确定。我可以做吗

  let utcTimestamp = moment.utc(date.toISOString()).hour(hours).minutes(minutes);

例如:如果用户输入 2018 年 3 月 13 日的日期和上午 8:45 的时间(在 GMT 时区),那么我可以使用上面的代码行来获取 UTC 时间戳,因为我可以直接添加小时以及到日期的分钟数

如果用户输入的日期为 2018 年 8 月 13 日和时间 8:45(由于夏令时更改,这是格林威治标准时间 +1),那么我可能会创建错误的日期。

【问题讨论】:

  • 不清楚你在问什么。 UTC 不遵守 DST。
  • 我希望新的编辑是清晰的

标签: react-native momentjs utc


【解决方案1】:

...我创建一个日期对象

let userDate = new Date(year, month, day)

这里要小心,您需要从月份中减去 1,因为它们由 Date 编号为 0-11,而不是通常的 1-12。

然后从用户输入分钟和小时的用户输入(到变量分钟和小时)

我需要将此日期和时间转换为 UTC 时间戳,使用时刻 ...

您不需要 Moment。只需在 Date 对象上调用 .toISOString()。它在生成字符串之前隐式转换为 UTC。

var utcString = new Date(year, month-1, day, hours, minutes).toISOString();

...我可以这样做吗

let utcTimestamp = moment.utc(date.toISOString()).hour(hours).minutes(minutes);

不,这没有意义。仅当日期以本地时间输入但时间以 UTC 输入时才有效。这种行为上的差异肯定会让您的用户感到困惑 - 特别是如果 UTC 日期与本地日期不同。

...如果用户输入 2018 年 8 月 13 日的日期和 8:45 的时间(由于夏令时更改,这是 GMT +1),那么使用上面的行我可能会创建错误的日期。

从当地时间到 UTC 的转换将自动考虑当地时区正在遵守的任何夏令时调整。您无需自行进行任何额外的调整。

【讨论】:

    【解决方案2】:

    这是一个 sn-p 我用于将 Outlook 日历事件从 UTC 转换为本地时间。相同的技术可以用于其他场景。

    //Get the users timezone
    let timeZone = item.originalStartTimeZone;
    
    //Get the start datetime in UTC time
    let timeStart = item.start.dateTime;
    
    //Calculate the negative offset. 
    let offset = - timeStart.localeCompare(timeZone);
    
    //Add the calculated offset to the UTC start time 
    let localStartTime = addHours(timeStart, offset);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      相关资源
      最近更新 更多