【问题标题】:Javascript: moment().to() doesn't seem to work with moment().utcOffset() on ParseJavascript:moment().to() 似乎不适用于 Parse 上的 moment().utcOffset()
【发布时间】:2015-09-28 10:15:24
【问题描述】:

我无法将 moment().to() 和 moment().utcOffset() 很好地放在 Parse 云代码上。

我在 Parse.com 上将其作为云代码运行,该代码始终采用 UTC。 (简化的)代码是

function cafeOpenState(cafe, utcOffset) {
    var returnString;

    var now = moment();
    now.utcOffset(utcOffset);
    var dayStr = now.format('ddd');

    // Get appropriate open and closing times
    var openTime = Number(cafe.get('OpenTime')); // stored as 3-4 digit integer e.g. 830
    var closeTime = Number(cafe.get('CloseTime')); // stored as 3-4 digit integer e.g. 2130

    // Figure out what time it is now, in 0-2400 format
    var timeNowStr = now.format('Hmm'); // need this later
    var timeNow = Number(timeNowStr);

    // Find out where it is currently in the time range
    if (openTime == 0 && closeTime == 0) {
        returnString = 'Closed today';
    } else if (timeNow < openTime) {
        var openTimeMoment = moment(openTime, 'Hmm');
        var opensIn = now.to(openTimeMoment);
        var opensInStr = openTimeMoment.format('H:mm');
        returnString = 'Not yet open, opens ' + opensIn + ' at ' + opensInStr;
    } else if (timeNow > openTime && timeNow < closeTime) {
        var closeTimeMoment = moment(closeTime, 'Hmm');
        var closesIn = now.to(closeTimeMoment);
        var closesInStr = closeTimeMoment.format('H:mm');
        returnString = 'Currently open , closes ' + closesIn + ' at ' + closesInStr;
    } else if (timeNow > closeTime) {
        returnString = 'Closed for today';
    } else {
        returnString = 'error';
    }

    // Return a human readable string
    return returnString;
}

问题在于,即使 'now'、'openTimeMoment' 和 'closeTimeMoment' 显示正确的 UTC 调整时间,'to' 函数似乎在 'now' 时忽略它。例如,我得到类似的输出(当时间是 15:00 时,我检查了 now 是否正确)'Currently open, closes in 10 hours at 17:00'

如果不包括 8 小时的 UTC 调整,则 10 小时是正确的。但显然应该是 2 小时。

无法在 JSFiddle 中重现这一点 - 工作正常。我在 Parse 上使用与小提琴相同版本的 moment.js。有什么想法吗?

【问题讨论】:

    标签: javascript parse-platform timezone momentjs parse-cloud-code


    【解决方案1】:

    我解决了 - 我错误地使用了 utcOffset。

    我设法通过删除 now.utcOffset(utcOffset); 并将其替换为 now.add(utcOffset - now.utcOffset(), 'minutes'); 来纠正我的功能

    如果有更好的答案,我想看看...

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 2023-04-06
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多