我正在尝试以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();
}
上面的代码总是返回错误的时间。
- 如何获取年、月、小时并返回UTC字符串以保存在数据库中
- 我将迁移日期为字符串的数据(例如:"2020-12-13"(,如何将其转换为UTC日期并正确减去天数
您需要展示一个示例来演示您的问题。下面显示了Luxon的UTC和setZone方法的使用;欧洲/阿姆斯特丹";。
请注意,传递给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 UTCn' + dateUTC.toString());
let dateUTC2 = date.toUTC();
console.log('toUTC methodn' + dateUTC2.toString());
<script src="https://cdn.jsdelivr.net/npm/luxon@1.25.0/build/global/luxon.min.js"></script>
PS阿姆斯特丹标准时间为+1,夏令时为+2。
如果日期已经解析,则可以直接使用日期构造函数。然而,构造函数取决于本地时区,幸运的是您可以使用Date。UTC。
棘手的部分是关于时区,构造函数不支持时区,但无论如何,这是一个简单的添加。
所以我打赌这样的东西应该有效:
function timeZoneToUTC(timezone, year, month, day, hours) {
return new Date(Date.UTC(year, month - 1, day, hours + timezone));
}
注意:month参数是一个索引(基于0(,因此如果您的1=1,则需要将您的月份减少1(如我的示例中所示(。
编辑:嗯,显然Date.UTC
返回了一个时间戳,所以无论如何都需要使用构造函数。