【问题标题】:Moment.js, FullCalendar.js datetime comparisons with timezone offsetsMoment.js、FullCalendar.js 日期时间与时区偏移的比较
【发布时间】:2021-07-08 20:33:20
【问题描述】:

我很困惑。

我有一个文本框,其中填充了日期和时间(字符串),例如 '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 返回一个 UTC 偏移量为 +0100(英国夏令时)的值

但是,我的日历事件对象返回一个 UTC 偏移量为 +0000 的日期。所以当我检查 '09/07/2021 10:30 +0100' 是否在 '09/07/2021 10:30 +0000' 和 '09/ 之间07/2021 11:30 +0000' 不行!

我想我的问题真的是:

  • 如何创建时区偏移为零的建议日期对象时刻?或
  • 如何告诉 fullcallendar 事件它显示的时间实际上是 BST (+0100)?目前我没有指定“时区”参数。

谢谢。

更新 嗯....这可能有用....虽然感觉有点笨拙:

 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
            });

【问题讨论】:

    标签: fullcalendar momentjs


    【解决方案1】:

    你可以像这样在 utc 中生成suggestedDateObj

    var suggestedDateObj = moment.utc(suggestedDate, 'DD/MM/YYYY HH:mm');`
    

    对于.isBetween(),我建议你像第四个参数一样使用方括号,就像documentation说的那样。

    if (suggestedDateObj.isBetween(startDateObj, endDateObj, undefined, '[]'))
    

    方括号表示检查必须包含限制者的日期

    【讨论】:

    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2011-05-18
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多