# JavaScript如何獲取今天星期幾
## 引言
在日常開發中,我們經常需要獲取當前日期信息,其中星期幾是一個常見需求。無論是制作日歷應用、顯示個性化問候語,還是根據星期安排不同的業務邏輯,掌握JavaScript中獲取星期幾的方法都至關重要。本文將詳細介紹5種不同的實現方式,并分析它們的優缺點。
## 方法一:使用Date對象的getDay()方法
### 基本實現
```javascript
const today = new Date();
const dayOfWeek = today.getDay(); // 返回0(周日)到6(周六)的數字
const days = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
console.log(days[dayOfWeek]);
const options = { weekday: 'long' };
console.log(new Date().toLocaleDateString('zh-CN', options));
// 輸出示例:"星期一"
// 英文輸出
new Date().toLocaleDateString('en-US', { weekday: 'long' }); // "Monday"
// 簡短格式
new Date().toLocaleDateString('zh-CN', { weekday: 'short' }); // "周一"
const formatter = new Intl.DateTimeFormat('zh-CN', { weekday: 'long' });
console.log(formatter.format(new Date()));
當需要多次格式化時,創建Formatter實例比重復調用toLocaleDateString更高效。
moment().format('dddd'); // 英文全稱
moment().format('ddd'); // 英文縮寫
moment().locale('zh-cn').format('dddd'); // 中文星期
dayjs().format('dddd');
function getChineseWeekday(date = new Date()) {
const day = date.getDay();
const weekdays = [
'星期日', '星期一', '星期二',
'星期三', '星期四', '星期五', '星期六'
];
return weekdays[day];
}
// 支持返回數字或文本
function getWeekday(date = new Date(), format = 'text') {
const day = date.getDay();
return format === 'number' ? day :
['日','一','二','三','四','五','六'][day];
}
通過jsPerf測試(10000次迭代): 1. getDay() + 數組映射:最快(0.12ms) 2. 自定義函數:0.15ms 3. Intl.DateTimeFormat:2.3ms 4. toLocaleDateString:3.1ms
const weekday = getChineseWeekday();
document.getElementById('greeting').textContent = `今天是${weekday},祝您工作愉快!`;
// 周末特殊樣式
if ([0, 6].includes(new Date().getDay())) {
document.body.classList.add('weekend-mode');
}
// 只獲取周一到周五的數據
const today = new Date().getDay();
if (today >= 1 && today <= 5) {
fetchWorkdayData();
}
Q:為什么getDay()返回的數字從周日開始?
A:這是遵循西方日期慣例(周日為一周的第一天)
Q:國際化方法在不同瀏覽器表現不一致怎么辦?
A:推薦指定完整的locale參數,或使用Intl polyfill
Q:需要處理時區時怎么辦?
A:所有方法都可以配合UTC方法使用,如getUTCDay()
根據需求選擇最佳方案: - 追求性能:getDay() + 手動映射 - 需要國際化:Intl.DateTimeFormat - 復雜日期處理:Day.js等庫 - 特殊需求:自定義工具函數
掌握這些方法后,你就能在項目中靈活處理星期相關的所有需求了! “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。