我試圖通過比較今天的日期是否在本周內的星期二下午 6 點之后來限制用戶在登錄頁面上看到某些資訊,從而只看到頁面。
我一直在嘗試設定此條件,但日期/時間功能不是我的強項。
使用下面的方法,我可以確定一周中的哪幾天,但如果在一個日歷周內有一個新的月份開始,邏輯會重置為下一個/上一個月份,這似乎有點問題。
const today = new Date("2022-11-03 16:20:04");
const first = today.getDate() - today.getDay() 1;
const tuesday = new Date(today.setDate(first 1));
const wednesday = new Date(today.setDate(first 2));
const thursday = new Date(today.setDate(first 3));
const friday = new Date(today.setDate(first 4));
console.log('tuesday: ' tuesday);
const diffTime = Math.abs(tuesday - today);
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
console.log(diffDays " days");
我想通過確定從星期一開始的多少天,我可以確定這是否已被超越。不幸的是,這也沒有考慮時間,也只考慮日期。
uj5u.com熱心網友回復:
您擁有的代碼的問題是setDate 修改了Date您呼叫它的物件,因此所有這些呼叫today.setDate都在修改today日期。要修復現有代碼,請先復制today然后修改復制的物件:
顯示代碼片段
const today = new Date("2022-11-03 16:20:04");
const first = today.getDate() - today.getDay() 1;
const tuesday = new Date(today); // Copy today...
tuesday.setDate(first 1); // ...now modify
const wednesday = new Date(today); // Copy today...
wednesday.setDate(first 2); // ..now modify
const thursday = new Date(today); // ...
thursday.setDate(first 3);
const friday = new Date(today);
friday.setDate(first 4);
console.log("tuesday: " tuesday);
const diffTime = Math.abs(tuesday - today);
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
console.log(diffDays " days");
(旁注:如上所示復制物件過去并不可靠Date。如果您需要支持稍微過時的瀏覽器,請在 之前添加。)todaynew Date( today)
但似乎有一種更簡單的方法可以檢查給定日期是否在本周星期二下午 6 點之后:
function currentTuesdayAt6PM() {
const today = new Date();
const first = today.getDate() - today.getDay() 1;
const tuesday = new Date(today); // or `= new Date( today);`
tuesday.setDate(first 1);
tuesday.setHours(18, 0, 0, 0);
return tuesday;
}
function isAfterCurrentTuesday(dt) {
// Get the Tuesday for the current week at 6 p.m.
const tuesday = currentTuesdayAt6PM();
// Check date vs. Tuesday at 6 p.m.
return dt > tuesday;
}
現場示例:
顯示代碼片段
function currentTuesdayAt6PM() {
const today = new Date();
const first = today.getDate() - today.getDay() 1;
const tuesday = new Date(today); // or `= new Date( today);`
tuesday.setDate(first 1);
tuesday.setHours(18, 0, 0, 0);
return tuesday;
}
function isAfterCurrentTuesday(dt) {
// Get the Tuesday for the current week at 6 p.m.
const tuesday = currentTuesdayAt6PM();
// Check date vs. Tuesday at 6 p.m.
return dt > tuesday;
}
function test(dt) {
const result = isAfterCurrentTuesday(dt);
const resultText = result ? "is >" : "is not >";
console.log(`${dt.toLocaleString()} ${resultText} ${currentTuesdayAt6PM().toLocaleString()}`);
}
test(new Date("2022-11-03 16:20:04")); // After
test(new Date("2022-11-01 16:20:04")); // Before
test(new Date("2022-11-01 18:00:00")); // Before (we're doing >, not >=)
test(new Date("2022-11-01 18:20:04")); // After
test(new Date("2022-10-31 18:20:04")); // Before
uj5u.com熱心網友回復:
您只需要檢查日期的星期幾是 > 2(星期二)還是等于 2 并且小時是 >= 18:
const landingOK = date => date.getDay() > 2 || /* wednesday or after */
date.getDay() == 2 && date.getHours() >= 18
let date = new Date('2022-10-31 00:00')
console.log(date.toLocaleString(), landingOK(date))
date = new Date('2022-11-01 17:59')
console.log(date.toLocaleString(), landingOK(date))
date = new Date('2022-11-01 18:00')
console.log(date.toLocaleString(), landingOK(date))
date = new Date('2022-11-02 00:00')
console.log(date.toLocaleString(), landingOK(date))
uj5u.com熱心網友回復:
getDay() on Date 給出從 0(星期日)、1(星期一)、2(星期二)開始的一周中的天數。getHours() 給出小時數。確保我們在第 2 天或第 2 天時越過了 18 小時,即下午 6 點。
const today = new Date();
const showInfo = (today.getDay() > 2 || today.getDay() === 2 && today.getHours() > 18)
uj5u.com熱心網友回復:
如果星期一是一周的第一天,則回傳與提供的日期在同一周的特定日期的特定時間的通用函式會有所幫助。
然后只需將回傳的日期與“現在”進行比較。
function getDayAt(date = new Date(), day = 1, hour = 6) {
let d = new Date(date);
d.setDate(d.getDate() - (d.getDay() || 7) day);
d.setHours(hour, 0, 0, 0);
return d;
}
// Is now before Tuesday at 6 pm?
let now = new Date();
console.log('Now is before 6 pm Tuesday: '
(now < getDayAt(now, 2, 18)));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/526480.html
標籤:javascriptjQueryWordPress约会时间
上一篇:pd.to_datetime不適用于類似于'10/30/20227:00:00AM 01:00'的值
下一篇:獲取按專案組分組的專案數量總和
