How can i find out programmatically when the next cron will run in order to present it to the author scheduling stuff?
i am using ultimate cron and an external cron process.
Basically, you cannot.
If you are using Drupal 7 built-in CRON triggering method, in Drupal 6 Poormanscron module, CRON run depends on the availability of visitor. If no one visits your page, CRON will not run. Drupal can't predict if or when visitor will appear, so the best you can know is when CRON will not yet run anyway, even if visitor is available.
If you are using external tools, Drupal has no way to predict if and how they will trigger it. It will accept all proper request, so you know even less than in the first case. Even if you know when it is supposed to run, you don't know time difference between servers, as it is subject to change slightly. You don't know the lag between a moment when CRON should happen and when it will, as practically no web servers are hosted on real time operating systems, so there are no guarantees about maximum time between action request and it's execution. In simpler words, server can postpone CRON task if it's to loaded, sometimes even skip it.
If you need predictable and reliable cron, go to http://example.com/admin/config/system/cron, find URL described as "To run cron from outside the site, go to". Then, mail your server administrator and ask him to add this to server's crontab:
*/5 * * * * wget -O - -q -t 1 http://www.example.com/cron.php?cron_key=yourcronkeyrandomstring
This will make your site's CRON run every 5 minutes, and you shouldn't need to know when exactly - it's ofthen enough for most tasks. If it's not, make it
*/2 to run it every 2 minutes, or just leave
* at every position to get it triggered each and every minute. You can read more about system's CRON configuration on Wikipedia. Of course it will not allow Drupal to know, it will just free you from the need to know.
The easiest method here (though by no means a good, reliable one) is to set up the cron job to run at a known time (let's say hourly, on the hour) and then take that knowledge back to Drupal where you can do something low-tech like
$minutes_left_until_next_cron = 60 - date('i', REQUEST_TIME);
Of course this relies on things like the web server and external cron servers' system times being synced correctly, and isn't really an elegant solution. But, it'll do in a pinch.