私のMongoDBデータベースには現在、文字列として時間が含まれていますが、特定の時間の間のクエリをフィルタリングできるようにしたいと思います。
たとえば、データベースの時間フィールドは「8:02 AM」と「10:20 PM」のようになり、「8:00 AM」と「9:00 AM」の間の結果のみで結果をフィルタリングできるようにしたいと考えています。 AM」。私の考えでは、すべての文字列をその日の分である数値に変換することです。たとえば、「9:00 AM」は540になり、「10:20 PM」は1,340になりますが、もっと多くのことが必要です。これを行うための効率的な方法私が見逃している明らかなものはありますか?
JavaScriptも試しましたDate()
が、それは私がESTであると想定し、時間をGMTに変換しました。これはまったく必要ありません。
動作しているように見えるいくつかのぎこちないコードですが、もっと良い方法があると確信しています:
const time_function = (time) => {
const split_string = time.replace(" ",":").split(":")
if(split_string[0]==="12" && split_string[2]==="AM"){
split_string[0] = "0"
split_string.push(0)
} else if(split_string[0]==="12" && split_string[2]==="PM"){
split_string.push(0)
} else if(split_string[2]=="PM"){
split_string.push(720)
} else if (split_string[2]==="AM"){
split_string.push(0)
}
const minutes = (parseInt(split_string[0])*60)+parseInt(split_string[1])+split_string[3]
return minutes
}
日は重要ではないように思われるので、任意の修正日を想定し、文字列をミリ秒に変換してそれらを比較することができます。
const lower = '8:00 AM'
const upper = '9:30 PM'
const time = '12:24 PM'
const delta_lower = Date.parse(`1/1/1970 ${lower}`)
const delta_upper = Date.parse(`1/1/1970 ${upper}`)
const delta_time = Date.parse(`1/1/1970 ${time}`)
console.log(delta_time > delta_lower && delta_time < delta_upper) //prints true
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加