Moment.js、FullCalendar.js 日期时间与时区偏移量的比较
Moment.js, FullCalendar.js datetime comparisons with timezone offsets
我很困惑。
我有一个文本框,其中填充了日期和时间(字符串),例如“09/07/2021 10:30”。
我将这个字符串转换成这样的时刻:
var suggestedDateObj = moment(suggestedDate, 'DD/MM/YYYY HH:mm');
然后我想检查这个日期和时间是否在 fullcalendar.js 事件对象的时间段之间。我是这样做的:
var startDateObj = moment(value.start);
var endDateObj = moment(value.end);
if (suggestedDateObj.isBetween(startDateObj, endDateObj)) {}
但是...它不起作用。这是由于时区偏移(我认为)。
suggestedDateObj returns 一个 UTC 偏移量为 +0100(英国夏令时)的值
但是我的日历事件对象 return 一个 UTC 偏移量为 +0000 的日期。因此,当我检查 '09/07/2021 10:30 +0100' 是否在 '09/07/2021 10:30 +0000 之间时' 和 '09/07/2021 11:30 +0000' 它不起作用!
我想我的问题真的是:
- 如何创建时区偏移量为零的 suggestedDateObj 时刻?或者
- 我如何告诉 fullcallendar 事件它显示的时间实际上是 BST (+0100)?目前我没有指定 'Timezone' 参数。
谢谢。
更新
嗯....这可能有用....虽然感觉有点笨拙:
var tmoment1 = moment(suggestedDate, 'DD/MM/YYYY HH:mm');
//create default date with specific timezone offset of zero
var suggestedDateObj = moment().utcOffset(0);
//set the date and time
suggestedDateObj.set({
day: tmoment1.day(),
month: tmoment1.month(),
year: tmoment1.year(),
hour: tmoment1.hour(),
minute: tmoment1.minute(),
second: 0
});
您可以像这样在 utc 中生成 suggestedDateObj
:
var suggestedDateObj = moment.utc(suggestedDate, 'DD/MM/YYYY HH:mm');`
对于.isBetween()
我建议你像第四个参数一样使用方括号,就像documentation说的那样。
if (suggestedDateObj.isBetween(startDateObj, endDateObj, undefined, '[]'))
方括号表示检查必须包括限制器的日期
我很困惑。
我有一个文本框,其中填充了日期和时间(字符串),例如“09/07/2021 10:30”。
我将这个字符串转换成这样的时刻:
var suggestedDateObj = moment(suggestedDate, 'DD/MM/YYYY HH:mm');
然后我想检查这个日期和时间是否在 fullcalendar.js 事件对象的时间段之间。我是这样做的:
var startDateObj = moment(value.start);
var endDateObj = moment(value.end);
if (suggestedDateObj.isBetween(startDateObj, endDateObj)) {}
但是...它不起作用。这是由于时区偏移(我认为)。
suggestedDateObj returns 一个 UTC 偏移量为 +0100(英国夏令时)的值
但是我的日历事件对象 return 一个 UTC 偏移量为 +0000 的日期。因此,当我检查 '09/07/2021 10:30 +0100' 是否在 '09/07/2021 10:30 +0000 之间时' 和 '09/07/2021 11:30 +0000' 它不起作用!
我想我的问题真的是:
- 如何创建时区偏移量为零的 suggestedDateObj 时刻?或者
- 我如何告诉 fullcallendar 事件它显示的时间实际上是 BST (+0100)?目前我没有指定 'Timezone' 参数。
谢谢。
更新 嗯....这可能有用....虽然感觉有点笨拙:
var tmoment1 = moment(suggestedDate, 'DD/MM/YYYY HH:mm');
//create default date with specific timezone offset of zero
var suggestedDateObj = moment().utcOffset(0);
//set the date and time
suggestedDateObj.set({
day: tmoment1.day(),
month: tmoment1.month(),
year: tmoment1.year(),
hour: tmoment1.hour(),
minute: tmoment1.minute(),
second: 0
});
您可以像这样在 utc 中生成 suggestedDateObj
:
var suggestedDateObj = moment.utc(suggestedDate, 'DD/MM/YYYY HH:mm');`
对于.isBetween()
我建议你像第四个参数一样使用方括号,就像documentation说的那样。
if (suggestedDateObj.isBetween(startDateObj, endDateObj, undefined, '[]'))
方括号表示检查必须包括限制器的日期