PostgreSQL рулит аццко.
SELECT
date_trunc('day', now())::date as today,
(now() - '1day'::interval)::date as yesterday,
date_trunc('week', now())::date as this_week_start,
(date_trunc('week', now())-'1week'::interval)::date as last_week_start,
(date_trunc('week', now())-'1day'::interval)::date as last_week_end,
date_trunc('month', now())::date as this_month_start,
(date_trunc('month', now())-'1month'::interval)::date as last_month_start,
(date_trunc('month', now())-'1day'::interval)::date as last_month_end
;
