我會建議使用下面的代碼。這包括12月 - 1月和2月29日左右的情況。雖然您可能想要看一下並在2月28日正確的排除或排除給定的days
。
BirthdayImminent(new DateTime(1980, 1, 1), new DateTime(2012, 1, 2), 7); // false
BirthdayImminent(new DateTime(1980, 1, 1), new DateTime(2012, 12, 28), 7); // true
BirthdayImminent(new DateTime(1980, 2, 28), new DateTime(2012, 2, 21), 7); // true
private static bool BirthdayImminent(DateTime birthDate, DateTime referenceDate, int days)
{
DateTime birthdayThisYear = birthDate.AddYears(referenceDate.Year - birthDate.Year);
if (birthdayThisYear < referenceDate)
birthdayThisYear = birthdayThisYear.AddYears(1);
bool birthdayImminent = (birthdayThisYear - referenceDate).TotalDays <= days;
return birthdayImminent;
}
同時保留邊緣案例記在Guvante張貼在下面的評論。
嘗試:DateOfBirth.Value.Date> = DateTime.Today.Date.AddYears(DateOfBirth.Value.Date.Year - DateTime.Today.Date.Year).AddDays(-7) – NeverHopeless
規範化兩個日期:複製的DOB值,並將年份設置爲與當年相同。現在你會比較蘋果和蘋果。 – Icarus
@Idle_Mind可能沒有閏年問題?例如,如果其中一個日期是1996年2月29日,並且您嘗試將其設置爲2013年2月29日,則可能無法獲得理想的結果。多年來日期之間的其他差異也是如此。 – Servy