* Get currency rates from ČNB in PHP
* @author Roman Ožana <roman@ozana.cz>
const URL = 'https://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt?date=';
private static $rates = [];
public function getRatesList(\DateTime $date = null) {
$date = $date ?: new \DateTime();;
if (!array_key_exists($key = $date->format('c'), self::$rates)) {
$data = file_get_contents(
self::URL . $date->format('d.m.Y'), null, stream_context_create(['http' => ['timeout' => 10]])
preg_match_all('/([\V]+)\|([\V]+)\|([\d]+)\|([A-Z]+)\|([\d]+),?([\d]*)/mi', $data, $matches, PREG_SET_ORDER);
foreach ($matches as $m) {
self::$rates[$key][$m[4]] = (object)[
'amount' => intval($m[3]),
'rate' => floatval($m[5] . '.' . $m[6]),
return self::$rates[$key];
public function toCZK($amount, $code = 'USD', \DateTime $date = null) {
$currency = self::getRatesList($date)[$code];
return floatval($amount * $currency->rate / $currency->amount);