2010年6月20日 星期日

預設(今天、明天、昨天)時間範圍觀念

如果你有作過類似報表的東西,可能就會使用到今天、昨天、前天、本月、上月這些預設的按鈕,讓使用者按下以後可以直接搜尋時間範圍的值,所以本篇就說明一下邏輯,以後你就無敵啦。
//今天這最好寫啦預設就有
DateTime.UtcNow.AddHours(8).ToString("yyyy/MM/dd");
//昨天,就是今天的日減一
DateTime.UtcNow.AddHours(8).AddDays(-1).ToString("yyyy/MM/dd");


//明天,就是今天的日加一
DateTime.UtcNow.AddHours(8).AddDays(+1).ToString("yyyy/MM/dd");
//前天,就是今天減二囉
DateTime.UtcNow.AddHours(8).AddDays(-2).ToString("yyyy/MM/dd");

//本週(想知道本週的第一天就先抓到今天是星期幾,然後就可以知道怎麼抓到星期日
DateTime.UtcNow.AddHours(8).AddDays(Convert.ToInt16((0 - Convert.ToInt16(DateTime.UtcNow.AddHours(8).DayOfWeek)))).ToString("yyyy/MM/dd");
//本週第一天

DateTime.UtcNow.AddHours(8).AddDays(Convert.ToInt16((6 - Convert.ToInt16(DateTime.UtcNow.AddHours(8).DayOfWeek)))).ToString("yyyy/MM/dd");
//本週最後一天

我們是利用Convert.ToInt16()的方法把DayOfWeek轉換成數字,這樣子我用0減去該數字就可以知道第一天,同理我用6減去該數字就可以知道最後一天了(一週的第一天是星期日唷)
//上週,一週7天,上週就是本週減去7天,下週也是一樣滴
DateTime.UtcNow.AddHours(8).AddDays(Convert.ToInt16((0 - Convert.ToInt16(DateTime.UtcNow.AddHours(8).DayOfWeek))) - 7).ToString("yyyy/MM/dd");

DateTime.UtcNow.AddHours(8).AddDays(Convert.ToInt16((6 - Convert.ToInt16(DateTime.UtcNow.AddHours(8).DayOfWeek))) - 7).ToString("yyyy/MM/dd");


//本月,之前的寫法就是抓到這個月份把日期改成1號,最後一天就是下個月1號再減一天,但是在c#裡面有更快的寫法
DateTime.UtcNow.AddHours(8).ToString("yyyy/MM/01");

DateTime.Parse(DateTime.UtcNow.AddHours(8).ToString("yyyy/MM/01")).AddMonths(1).AddDays(-1).ToString("yyyy/MM/dd");



//上個月,就是本月減掉一個月
DateTime.UtcNow.AddHours(8).AddMonths(-1).ToString("yyyy/MM/01");

DateTime.Parse(DateTime.UtcNow.AddHours(8).ToString("yyyy/MM/01")).AddDays(-1).ToString("yyyy/MM/dd");



//本季,一年有四季,所以一季是三個月沒錯吧,所以我們利用下方就可以抓到這是那一季,接者再抓出第一天
DateTime.UtcNow.AddHours(8).AddMonths(0 - ((DateTime.UtcNow.AddHours(8).Month - 1) % 3)).ToString("yyyy/MM/01");

DateTime.Parse(DateTime.UtcNow.AddHours(8).AddMonths(3 - ((DateTime.UtcNow.AddHours(8).Month - 1) % 3)).ToString("yyyy/MM/01")).AddDays(-1).ToString("yyyy/MM/dd");

轉自 http://demo.tc/Post/91 真的很受用,感謝demo分享

沒有留言:

張貼留言