Bagaimana saya mendapatkan hari terakhir dalam sebulan?

326

Bagaimana saya bisa menemukan hari terakhir bulan ini di C #?

Misalnya, jika saya memiliki tanggal 03/08/1980, bagaimana saya mendapatkan hari terakhir bulan 8 (dalam kasus ini 31)?

Emas
sumber
2
@ Mark: Untuk apa saya bertanya? Jawaban Anda sendiri tidak memerlukan metode ekstensi, saya pikir.
abatishchev
4
Hari terakhir tidak khusus untuk bulan saja, Anda perlu tahun juga. Hari terakhir februari 2010 adalah 28, tetapi hari terakhir februari 2008 adalah 29.
Guffa
@abatishchev Tidak memerlukan metode ekstensi, tetapi pertanyaannya tidak benar-benar memintanya. Namun, jauh lebih bagus dan lebih mudah dibaca, setidaknya bagi saya, untuk melihatnya. Metode penyuluhan lebih merupakan saran daripada apa pun. Solusi apa pun akan bekerja dengan metode ekstensi, bukan hanya milik saya.
Markus

Jawaban:

657

Hari terakhir bulan Anda mendapatkan seperti ini, yang menghasilkan 31:

DateTime.DaysInMonth(1980, 08);
Oskar Kjellin
sumber
28
public DateTime statis ConvertToLastDayOfMonth (DateTime date) {mengembalikan DateTime baru (date.Year, date.Month, DateTime.DaysInMonth (date.Year, date.Month)); } untuk mendapatkan hari terakhir bulan itu dalam format tanggal
regisbsb
177
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month);
Menandai
sumber
@ Henk Sebenarnya saya menarik ini dari suatu tempat di sumber kami yang menciptakan DateTimedari lastDayOfMonth. Jujur baik cara bekerja dengan sangat baik. Ini argumen yang sangat bagus mana yang lebih baik. Saya sudah melakukan keduanya dan keduanya menghasilkan jawaban yang sama.
Mark
37

Jika Anda menginginkan tanggal , diberikan satu bulan dan satu tahun, ini sepertinya benar:

public static DateTime GetLastDayOfMonth(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month));
}
meskipun
sumber
9

Kurangi satu hari dari yang pertama bulan depan:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month+1,1).AddDays(-1);

Juga, jika Anda membutuhkannya untuk bulan Desember juga:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month,1).AddMonths(1).AddDays(-1);
Radu094
sumber
6

Anda dapat menemukan tanggal terakhir setiap bulan dengan kode ini:

var now = DateTime.Now;
var startOfMonth = new DateTime(now.Year, now.Month, 1);
var DaysInMonth = DateTime.DaysInMonth(now.Year, now.Month);
var lastDay = new DateTime(now.Year, now.Month, DaysInMonth);
mash
sumber
6

Anda dapat menemukan hari terakhir bulan itu dengan satu baris kode:

int maxdt = (new DateTime(dtfrom.Year, dtfrom.Month, 1).AddMonths(1).AddDays(-1)).Day;
jithin
sumber
Sungguh mengherankan saya bahwa alih-alih metode sederhana:, DateTime.DaysInMonthmengapa seseorang harus mencari cara yang tidak dapat dibaca dan rumit untuk mencapainya !? - Tetapi sebagai solusi yang valid dapat diterima;).
shA.t
5

Dari DateTimePicker:

Kencan pertama:

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

Tanggal terakhir:

DateTime last_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, DateTime.DaysInMonth(DateTimePicker.Value.Year, DateTimePicker.Value.Month));
Md. Shafiqur Rahman
sumber
2

Untuk mendapatkan hari terakhir dalam sebulan di kalender tertentu - dan dalam metode ekstensi -:

public static int DaysInMonthBy(this DateTime src, Calendar calendar)
{
    var year = calendar.GetYear(src);                   // year of src in your calendar
    var month = calendar.GetMonth(src);                 // month of src in your calendar
    var lastDay = calendar.GetDaysInMonth(year, month); // days in month means last day of that month in your calendar
    return lastDay;
}
shA.t
sumber
2
// Use any date you want, for the purpose of this example we use 1980-08-03.
var myDate = new DateTime(1980,8,3);
var lastDayOfMonth = new DateTime(myDate.Year, myDate.Month, DateTime.DaysInMonth(myDate.Year, myDate.Month));
Jasper Risseeuw
sumber
Jawaban ini hanya menanggapi contoh dari penanya. Jawaban yang lebih komprehensif akan lebih membantu.
Scott Lawrence
Anda dapat menggunakan tanggal apa pun yang Anda inginkan sebagai nilai input, sehingga Anda dapat menerapkan solusi ini ke tanggal yang Anda inginkan.
Jasper Risseeuw
1
Ini akan gagal untuk beberapa tanggal, coba var myDate = new DateTime(1980, 1, 31);(kembalilah tanggal 29)
Hans Ke
Hans Ke st ing, Anda benar. Metode ini akan gagal jika bulan berikutnya memiliki hari yang lebih sedikit daripada saat ini. Saya kira cara termudah adalah dengan menggunakan DateTime.DaysInMonth () tetapi itu adalah jawaban yang diterima sehingga jawaban saya harus dihapus.
Jasper Risseeuw
-1

Saya tidak tahu C # tetapi, jika ternyata tidak ada cara API yang mudah untuk mendapatkannya, salah satu cara Anda dapat melakukannya adalah dengan mengikuti logika:

today -> +1 month -> set day of month to 1 -> -1 day

Tentu saja, itu mengasumsikan Anda memiliki matematika tanggal dari jenis itu.

RHSeeger
sumber
Ini tidak akurat.
EJoshuaS