Javascript: moment().to() 似乎不适用于 parse 上的 moment().utcOffset()
Javascript: moment().to() doesn't seem to work with moment().utcOffset() on Parse
我无法将 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 上使用与在 fiddle 上相同的 moment.js 版本。有什么想法吗?
我解决了 - 我错误地使用了 utcOffset。
我设法通过删除 now.utcOffset(utcOffset);
并将其替换为 now.add(utcOffset - now.utcOffset(), 'minutes');
来更正我的功能
如果有更好的答案,我想看看...
我无法将 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 上使用与在 fiddle 上相同的 moment.js 版本。有什么想法吗?
我解决了 - 我错误地使用了 utcOffset。
我设法通过删除 now.utcOffset(utcOffset);
并将其替换为 now.add(utcOffset - now.utcOffset(), 'minutes');
如果有更好的答案,我想看看...