No puedo pensar en una o dos líneas fáciles que tendrían los meses anteriores el primer día y el último día.
Estoy LINQ-ifying una aplicación web de encuestas, y exprimieron un nuevo requisito en.
La encuesta debe incluir todas las solicitudes de servicio del mes anterior. Entonces, si es el 15 de abril, necesito todos los ID de solicitud de Marches.
var RequestIds = (from r in rdc.request
where r.dteCreated >= LastMonthsFirstDate &&
r.dteCreated <= LastMonthsLastDate
select r.intRequestId);
Simplemente no puedo pensar en las fechas fácilmente sin un cambio. A menos que sea ciego y pase por alto un método interno para hacerlo.
La forma en que lo hice en el pasado es obtener el primer día de este mes
Luego reste un día para finalizar el mes pasado
Luego reste un mes para obtener el primer día del mes anterior
fuente
return date.AddDays(-(date.Day-1))
versusreturn new DateTime(date.Year, date.Month, 1);
y el rendimiento de las primeras iteraciones de más de 2000 es mejor (923 ms en comparación con 809 ms devolviendo el mismo objeto)usando Fluent DateTime https://github.com/FluentDateTime/FluentDateTime
fuente
fuente
Yo uso este simple one-liner:
Tenga en cuenta que retiene el tiempo.
fuente
Un enfoque que utiliza métodos de extensión:
Vea este enlace http://www.codeplex.com/fluentdatetime para algunas extensiones inspiradas de DateTime.
fuente
El caso de uso canónico en el comercio electrónico son las fechas de vencimiento de la tarjeta de crédito, MM / aa. Resta un segundo en lugar de un día. De lo contrario, la tarjeta aparecerá vencida durante todo el último día del mes de vencimiento.
fuente
Si existe la posibilidad de que sus fechas y fechas no sean fechas estrictas del calendario, debería considerar usar comparaciones de exclusión de fecha final ... Esto evitará que se pierda cualquier solicitud creada durante la fecha del 31 de enero.
fuente
fuente
Esta es una versión de la respuesta de Mike W:
Puedes llamarlo así:
fuente