首页 > 解决方案 > 从日期字符串以 UTC 正确计算日期时间

问题描述

我正在尝试以 UTC 计算日期时间,我有以下代码并使用Luxon

weeklyDish.orderBeforeTime = timeZoneToUTC(
  "Europe/Amsterdam",
  year,
  month,
  day,
  hours
);

function timeZoneToUTC(timezone, year, month, day, hours) {
  const dateObj = `${year}-${month}-${day} ${hours}:00`;
  const datetime = DateTime.fromFormat(dateObj, "yyyy-M-d H:mm", {
    zone: timezone,
  });
  return datetime.toUTC().toString();
}

上面的代码总是返回错误的时间。

  1. 如何获取年、月、小时并返回 UTC 字符串以保存在数据库中?
  2. 我将迁移日期为字符串的数据(例如:“2020-12-13”),如何将其转换为 UTC 日期并正确减去天数?

标签: javascriptdatedatetime

解决方案


您需要展示一个示例来证明您的问题。下面显示了 Luxon 的UTCsetZone方法的使用,它们似乎都可以正确转换为“欧洲/阿姆斯特丹”设置的日期。

请注意,传递给DateTime.fromISO的字符串必须形成有效的 ISO 8601 时间戳,例如 YYYY-MM-DDTHH。

let DateTime = luxon.DateTime;

let [tz, y, m, d, h] = ["Europe/Amsterdam", '2020', '11', '30', '12'];

let date = DateTime.fromISO(`${y}-${m}-${d}T${h}`, { zone: "Europe/Amsterdam" });

console.log(tz + '\n' + date.toString());

let dateUTC = date.setZone('UTC');
console.log('setZone to UTC\n' + dateUTC.toString());

let dateUTC2 = date.toUTC();
console.log('toUTC method\n' + dateUTC2.toString());
<script src="https://cdn.jsdelivr.net/npm/luxon@1.25.0/build/global/luxon.min.js"></script>

PS 阿姆斯特丹标准时间是+1,夏令时是+2。


推荐阅读