Neo4j has a lot of support for date/time and duration entities. You can find a description in the following section of the cypher manual:
To address your two questions, the following should work:
date() returns the current date, which is an object with many attributes. dayOfWeek is one that returns the number of the weekday. The numbers start with Monday as the beginning of a week, so if you want Sunday to be the beginning, you can use the following query to transform the day of week to start with Sunday as 1.
return (date().dayOfWeek+1)%7
You can add a duration of any amount to a date to get a new date. The following works to add 1 day to the current date:
return date()+duration({days:1})
Review the manual for see all of the capabilities. There are many.
In the second case, I created the query as shown below with your information and hints.
WITH date.truncate('week', date(), {dayOfWeek: 1}) as outday,
date() as today
RETURN
CASE
WHEN outday < today then outday + duration({days:7})
ELSE outday
END AS thedate