2014-04-15 46 views
11

Cách nhận ngày bắt đầu và ngày kết thúc của tháng theo biến khác nhau. Tôi đã thử điều này và tôi có được ngày bắt đầu nhưng không thể tìm thấy ngày kết thúcLàm thế nào để có được ngày tháng bắt đầu và ngày kết thúc?

DateTime startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("yyyy-MM-dd HH:mm:ss.fff"); 
DateTime endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(30).ToString("yyyy-MM-dd HH:mm:ss.fff"); 

Logic này không thành công khi ngày kết thúc tháng là 31 và 28 hoặc 29. Trợ giúp của bạn chắc chắn được phân bổ.

+5

Ngày tháng luôn bắt đầu '1' nhưng có thể kết thúc bằng' 28', '29',' 30' hoặc '31'. Theo tôi biết, cách hợp lý nhất sẽ là thêm '1' tháng vào ngày bắt đầu của bạn và trừ' 1' ngày với nó. –

+0

Lưu ý: Vui lòng không sử dụng một số 'DateTime.Now' trong mã của bạn, thay vào đó khai báo một biến để lưu trữ nó -' var now = DateTime.Now; '- sau đó sử dụng biến đó ([câu hỏi liên quan] (https : //stackoverflow.com/q/29530946/4519059));) –

Trả lời

32

Bạn có thể tính toán endDate như thế này:

DateTime endDate = startDate.AddMonths(1).AddDays(-1); 
+1

@Downvoter chăm sóc bình luận ít nhất? –

+2

@ SonerGönül Downvoter có thể có nhiều lý do. Ví dụ, anh ta có thể nói rằng mã gốc sẽ không biên dịch vì '.ToString()' nên mã của tôi cũng không biên dịch. Hoặc bất cứ điều gì khác. –

14

Để có được ngày đầu tiên

public DateTime FirstDayOfMonth(DateTime dateTime) 
{ 
    return new DateTime(dateTime.Year, dateTime.Month, 1); 
} 

Để có được ngày cuối

public DateTime LastDayOfMonth(DateTime dateTime) 
{ 
    DateTime firstDayOfTheMonth = new DateTime(dateTime.Year, dateTime.Month, 1); 
    return firstDayOfTheMonth.AddMonths(1).AddDays(-1); 
} 
+7

Tôi sẽ sử dụng hàm đầu tiên trong hàm thứ hai. –

1
DateTime endDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1) 
         .AddMonths(1).AddDays(-1); 
1

Bạn đã có ngày bắt đầu:

DateTime monthStartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); 

Có phương pháp lấy số ngày trong một tháng (và xem mã IL, có vẻ như cách này hiệu quả hơn các câu trả lời khác, trừ khi bạn sẽ làm điều đó tỷ thời gian, tôi nghi ngờ sẽ có bất kỳ sự khác biệt):

int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); 
DateTime monthEndDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, daysInMonth); 
-2

Đối với ngày đầu tiên:

DateTime first_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, 1); 

Đối với ngày cuối cùng:

DateTime last_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, DateTime.DaysInMonth(DateTimePicker.Value.Year, DateTimePicker.Value.Month)); 
+0

@Downvoter .. quan tâm để bình luận ít nhất? –

+0

Sự khác biệt về câu trả lời của bạn cho [câu trả lời này trong 2 năm trước] (https://stackoverflow.com/a/23077662/4519059) là gì? –

Các vấn đề liên quan