A harsh winter had forced the Dano-Norwegian fleet into port, and frozen the straits Great Belt and Little Belt. After entering Jutland from the south, a Swedish army of 7,000 battle-hardened veterans marched across the icy Little Belt onto the Danish island of Funen on 30 January 1658. The Swedes captured the island of Funen within a few days, and soon after the islands Langeland, Lolland, and Falster. The Swedish army continued to Zealand, threatening the Danish capital of Copenhagen. The rapid Swedish attack across the frozen Belts was completely unexpected; Frederick III considered meeting the Swedish army in battle, but his advisors thought this was too risky and instead Denmark signed the very harsh Treaty of Roskilde on 26 February 1658.
Sweden had won its most prestigious victory, and Denmark-Norway had suffered its most costly defeat. Denmark-Norway yielded the Danish provinces of Scania, Halland, Blekinge and the island of Bornholm and the Norwegian provinces Bohuslen and Trondhjem len (Trøndelag and Nordmøre) to Sweden. Halland had already been under Swedish control since the signing of the Treaty of Brömsebro in 1645, but it now became Swedish territory permanently.