我正在使用 Javascript 開發應用程式。在代碼中,我收到Datetime. 此日期時間可以有或沒有時區偏移量。我想根據我需要做出一些決定來檢查時區偏移是否存在。
以下是將進入我的 Javascript 函式的資料型別:
const dateWithoutOffset = "2022-03-01T16:23:19"
const dateWithOffset = "2022-03-01T16:23:19 01:00"
//Perform something to check for offset
if(dateWithOffset.contains(offset)){
console.log("OFFSET is PRESENT")
}
//Perform something to check offset is not present
if(dateWithoutOffset.contains(offset)){
console.log("OFFSET IS NOT PRESENT")
}
我知道我可以檢查長度,但我覺得這不是正確的方法,所以想在這里詢問并找到找到偏移量的正確方法。
我嘗試了 Stackoverflow 中存在的很多方法和答案,但似乎沒有什么能給我正確的答案,所以在這里發布以獲得正確的作業答案。
uj5u.com熱心網友回復:
您可以使用正則運算式來決議這些 ISO 日期字串的偏移量。
創建一些方便的函式,例如hasOffset()andgetUTCOffsetMinutes()應該使問題更容易解決。
如果日期有偏移,您可以繼續決議它(如下所示)或執行其他操作,例如以不同方式顯示。
const isoDatePattern = /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d )?([ -]\d{2}:?\d{2}|Z)$/
function getOffsetStr(input) {
const groups = input.match(isoDatePattern);
return groups ? groups[4]: null;
}
function hasOffset(input) {
return (!!getOffsetStr(input));
}
function getUTCOffsetMinutes(input) {
const offset = getOffsetStr(input);
return offset ? parseUTCOffset(offset): null;
}
function parseUTCOffset(offsetStr) {
if (offsetStr.toUpperCase() === 'Z') {
return 0;
}
const sign = offsetStr.startsWith('-') ? -1: 1;
const hour = offsetStr.slice(1,3);
const min = offsetStr.slice(-2);
return sign * hour * 60 min;
}
const testInputs = [
"2010-11-06T02:19:00.250",
"2022-03-01T16:23:19",
"2025-04-20T17:02:03.401 0200",
"2022-03-01T16:23:19 01:00",
"2022-03-01T16:23:19Z",
"2022-03-01T16:23:19-0500",
"2022-03-01T16:23:19 12:00"
]
console.log('Input'.padEnd(28, ' '), 'Has Offset ' ,'UTC Offset (minutes)')
testInputs.forEach(input => {
console.log(input.padEnd(28, ' '), hasOffset(input), '\t', getUTCOffsetMinutes(input));
})
.as-console-wrapper { max-height: 100% !important; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/438200.html
標籤:javascript 约会时间 时区 时区偏移
上一篇:為什么日期長度回傳Null?
