2011-07-14 11 views
9

Tengo una fecha en este formato {Y,M,D}. ¿Hay alguna buena biblioteca de apoyo o trucos que pueda usar simplemente, por ejemplo restar tres meses a partir de esta fecha sin tener problemas con fechas inválidas, años bisiestos, etc.Fecha aritmética en Erlang

Mi último uso similar se encuentra en MySql donde puede escribir :

Select '2011-05-31' - Interval 3 Month; 

que rinde '2011-02-28'. No estoy interesado en cómo escribir esta biblioteca yo mismo, eso es lo que me gustaría evitar.

Respuesta

17

Uso edate - específicamente la función de desplazamiento.

> edate:shift({2011,5,31}, -3, months). 
{2011,2,28} 

Debajo del capó utiliza el módulo de calendario, por lo que se ocupa correctamente de todas las cajas de esquina.

+0

¡excelente respuesta! .... gracias Weldon –

+0

edate parece muy agradable, lo echaré un vistazo, gracias! –

19
1> calendar:gregorian_days_to_date(calendar:date_to_gregorian_days({2011, 7, 14}) - 90).  
{2011,4,15} 

http://www.erlang.org/doc/man/calendar.html

+1

Esto funciona bien sin necesidad de descargar un módulo de terceros, gracias! –

+0

+1 para usar la funcionalidad incorporada – btk

3

Creé una esencia de GitHub con algunas utilidades útiles para este tipo de cosas. Siéntase libre de robar si lo desea.

https://gist.github.com/104903