最近工作中,用到一個ionic3的日曆控件,本身功能比較強大,基本滿足了開發的需求,這個在後面的文章中單獨做介紹。本章中主要說下獲取某月和某周的日期範圍。
首先介紹下某周的的日期範圍獲取,這部分比較簡單,直接上代碼,在這部分代碼中,我用到angular中管道對象DatePipe,作用是日期格式化,之前一直只是在html頁面中用到,這次發現在js裏,他依然很好用。當然啦,各位也可以用其他方式進行日期的格式化。
constructor(public navCtrl: NavController, public navParams: NavParams,
private datePipe: DatePipe) {}
//一天的毫秒數
const ONE_DAY_SECONDS = 86400000;
/**
* 根據日期獲取當前周的日期範圍
* @param date
*/
getWeekRange(date: any){
let now = date.getDay();
//每週開始日期
let weekStart = this.datePipe.transform(new Date(date.getTime() - (now-1) * ONE_DAY_SECONDS), 'yyyy-MM-dd');
//每週結束日期
let weekEnd = this.datePipe.transform(new Date(date.getTime() + (7 - now) * ONE_DAY_SECONDS),'yyyy-MM-dd');
}
接下來是計算月的日期範圍,這一塊本來需要判斷年份和月份,步驟就顯得比較繁瑣。那麼這邊可以利用Date對象中的一個特點,即日的參數爲0時,會自動獲取上個月的最後一天的日期。
/**
* 獲取當前月的日期範圍
* @param date
*/
getMonthRange(date: any){
//獲取下個月的月數
let month = date.getMonth() + 1;
let year = date.getFullYear();
if(month === 12){
//當前月爲12月時,則年數+1,月份爲1月
month = 0;
year = year + 1;
}
//日參數設爲0,即可獲取上個月最後一天的日期
let d= new Date(year, month, 0);
return d;
}
親測有效,利用這個特性在以後月份的計算中就會省力很多。如果大家有什麼更好的方法,歡迎交流探討~