With a CRON job, this isn't really a task for PHP. PHP doesn't sit and run in a continuous loop unless something imitates it. You could use CB Emails, but something needs to execute the CB trigger you're using. You could use after login so it'd check if the user should receive an email soon as they login, but that's almost pointless as they logged in so are probably aware of what the email contains, etc..
Your best bet and likely only reliable solution is to use CRON, which can be query based to check the database and compare the date fields value to whatever you need it compared to.
You can also check Joomla.org for some possible solution, but again if is PHP it would need to be initiated. Most do a check everytime the Joomla site is visited then fires emails if necessary.. so as long as there's at least 1 active user that'd be an acceptable PHP solution, but that's a bit of heavy work on every page load making CRON that much more attractive.