Saya tidak bisa memikirkan satu atau dua liner mudah yang akan mendapatkan bulan-bulan sebelumnya hari pertama dan hari terakhir.
Saya LINQ-ifying aplikasi web survei, dan mereka memeras persyaratan baru di.
Survei harus mencakup semua permintaan layanan untuk bulan sebelumnya. Jadi jika tanggal 15 April, saya membutuhkan semua id permintaan Marches.
var RequestIds = (from r in rdc.request
where r.dteCreated >= LastMonthsFirstDate &&
r.dteCreated <= LastMonthsLastDate
select r.intRequestId);
Aku hanya tidak bisa memikirkan tanggal dengan mudah tanpa saklar. Kecuali saya buta dan mengabaikan metode internal untuk melakukannya.
Cara saya melakukan ini di masa lalu adalah pertama kali mendapatkan hari pertama bulan ini
Kemudian kurangi satu hari untuk mengakhiri bulan lalu
Kemudian kurangi satu bulan untuk mendapatkan hari pertama bulan sebelumnya
sumber
return date.AddDays(-(date.Day-1))
versusreturn new DateTime(date.Year, date.Month, 1);
dan kinerja iterasi pertama lebih dari 2000 lebih baik (923ms baru versus 809ms mengembalikan objek yang sama)menggunakan Fluent DateTime https://github.com/FluentDateTime/FluentDateTime
sumber
sumber
Saya menggunakan one-liner sederhana ini:
Ketahuilah, bahwa itu masih ada waktu.
sumber
Pendekatan menggunakan metode ekstensi:
Lihat tautan ini http://www.codeplex.com/fluentdatetime untuk beberapa ekstensi DateTime yang diilhami.
sumber
Kasus penggunaan kanonik dalam e-commerce adalah tanggal kedaluwarsa kartu kredit, MM / yy. Kurangi satu detik, bukan satu hari. Kalau tidak, kartu akan kedaluwarsa untuk seluruh hari terakhir dari bulan kedaluwarsa.
sumber
Jika ada kemungkinan bahwa data Anda bukan tanggal kalender yang ketat, Anda harus mempertimbangkan untuk menggunakan perbandingan pengecualian tanggal ... Ini akan mencegah Anda dari kehilangan permintaan yang dibuat pada tanggal 31 Januari.
sumber
sumber
Ini adalah jawaban Mike W:
Anda bisa menyebutnya seperti ini:
sumber