JavaScript:如何獲取某一天所在的星期

来源:https://www.cnblogs.com/xumengxuan/archive/2019/10/17/11693332.html
-Advertisement-
Play Games

我們會遇到的需求的是,獲取今天或者某一天所在星期的開始和結束日期。 我們這裡來獲取今天所在星期的始末日期,我們可以通過 來獲取今天是星期幾,然後再通過這個減去或者加上一定的天數,就是這個星期的開始日期和結束日期。 是不是很完美?但,這裡有一個很大的 bug! 註意:如果今天是周日,那麼 就會是 0, ...


我們會遇到的需求的是,獲取今天或者某一天所在星期的開始和結束日期。

我們這裡來獲取今天所在星期的始末日期,我們可以通過(new Date).getDay()來獲取今天是星期幾,然後再通過這個減去或者加上一定的天數,就是這個星期的開始日期和結束日期。

function getWeekStartAndEnd() {
    const oneDayTime = 1000 * 60 * 60 * 24; // 一天里一共的毫秒數
    const today = new Date();
    const todayDay = today.getDay(); // 獲取今天是星期幾,假設是周3
    const startDate = new Date(
        today.getTime() - oneDayTime * (todayDay - 1)
    );
    const endDate = new Date(today.getTime() + oneDayTime * (7 - todayDay));

    return { startDate, endDate };
}
const week = getWeekStartAndEnd();
console.log(week.startDate, week.endDate);

是不是很完美?但,這裡有一個很大的 bug!註意:如果今天是周日,那麼todayDay就會是 0,若還是按照上面的思路,則星期一的日期會變成下周一的日期,星期日的日期會變成下周日的日期。因此,這裡我們需要特殊處理下,當 todayDay 為 0 時,就將其賦值為 7。同時,我們還可以傳入一個時間戳,獲取特定某一天所在的星期。

最終的解決方案

function getWeekStartAndEnd(timestamp) {
    const oneDayTime = 1000 * 60 * 60 * 24; // 一天里一共的毫秒數
    const today = timestamp ? new Date(timestamp) : new Date();
    const todayDay = today.getDay() || 7; // 若那一天是周末時,則強制賦值為7
    const startDate = new Date(
        today.getTime() - oneDayTime * (todayDay - 1)
    );
    const endDate = new Date(today.getTime() + oneDayTime * (7 - todayDay));

    return { startDate, endDate };
}

擴展

如果我要輸出今天所在星期,這一周里所有的日期,該怎麼辦呢?很簡單,先獲取到這一周里的第一天,然後第一天加上oneDayTime*i的時間戳,就是第 i 天的日期,或者在前一天的基礎上加上 oneDayTime 也可以。

function getAllWeekToday() {
    const oneDayTime = 1000 * 60 * 60 * 24;
    const today = new Date();
    const todayDay = today.getDay() || 7; // 若那一天是周末時,則強制賦值為7
    const startDate = new Date(
        today.getTime() - oneDayTime * (todayDay - 1)
    );
    let dateList = [startDate];

    for (let i = 1; i < 7; i++) {
        dateList.push(new Date(startDate.getTime() + oneDayTime * i));
    }
    return dateList;
}

歡迎訪問蚊子的前端博客: https://www.xiabingbao.com
歡迎關註蚊子的公眾號:
蚊子的前端公眾號


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 減少 HTTP 的請求次數和傳輸報文的大小 -CSS SPRITE(雪碧圖、圖片精靈)技術 - 使用字體圖標(ICON FONT)或者 SVG 等矢量圖; 可以減少 HTTP 請求次數或者減少請求內容的大小 ,使圖片渲染的更快:因為他們是基於代碼渲染的,而對於點陣圖(png/jpg/gif)是需 ...
  • web前端: 是一門客戶端語言 客戶端:用戶上網的那一端 服務端:後端,是建立在一個公司內部的埠 web全棧工程師:node.js web前端的三大組成部分; HTML 結構 框架 CSS 樣式 JS javascript 行為 HTML: 超文本“標記語言” 讓瀏覽器識別的一門語言 雙標記標簽: ...
  • https://blog.csdn.net/codingnoob/article/details/80879208 ...
  • 本博文僅為本人學習的一個記錄和總結! 學校開設了JSP這門課,覺得挺有意思的,就去網上學了一下HTML,我是在菜鳥教程學的,用的是HBuilder(這真是一個很好的IDE)學完之後就想總結一下知識點,鞏固一下。 代碼後面跟的都是用HTML標簽之後顯示的效果圖片。 1.HTML預設模板 2.定義標題 ...
  • 1、省城市的三級聯動 結果截圖: 2、移出數組arr([1,2,3,4,2,5,6,2,7,2])中與2相等的元素,並生成一個新數組,不改變原數組。 效果圖: 3、編寫函數實現單擊change按鈕,為div元素添加紅色雙線的邊框。 效果圖: 2019-10-17 20:14:31 ...
  • JavaScript Variables JavaScript 變數(Variables)是用於存儲數據值的容器。 1. 創建一個 JavaScript 變數,可以使用關鍵字 。 Example 2. The "old" var 1. 在較早的腳本中,能夠找到關鍵字 而不是 。 2. 關鍵字 與 都 ...
  • HTML5新增的結構元素(新增的都是塊元素,獨占一行) 1) header 定義了文檔的頭部區域 <header> <h1>網站標題<h1> </header> 2) nav 定義導航鏈接的部分 <nav> <ul> <li>首頁</li> <li>關於我們</li> <li>聯繫我們</li> < ...
  • 1. QuickJS 快速入門 (QuickJS QuickStart) "1. QuickJS 快速入門 (QuickJS QuickStart)" "1.1. 簡介" "1.2. 安裝" "1.3. 簡單使用" "1.3.1. 控制台執行" "1.3.2. js腳本執行" "1.3.3. 直接編 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...