Old English todæge, to dæge "on (the) day," from to "at, on" (see to) + dæge, dative of dæg "day" (see day). Generally written as two words until 16c., after which it usually was written to-day until early 20c.
Similar constructions exist in other Germanic languages (cf. Dutch van daag "from-day," Danish and Swedish i dag "in day"). German heute is from Old High German hiutu, from Proto-Germanic *hiu tagu "on (this) day," with first element from PIE pronomial stem *ki-, represented by Latin cis "on this side."