Danish winger Mikkel Damsgaard broke the deadlock in the 30th minute with a stunning free-kick goal at London's Wembley Stadium.
But England equalized when defender Simon Kjaer netted an own goal in the 39th minute.
Both sides failed to produce a goal in the second half and the match went into extra time.
In the 103rd minute, England was awarded a penalty.
After a minute, Danish goalie Kasper Schmeichel came up with a great save, but Harry Kane hit the rebound into Denmark's net.
With this result, England moved to the final of a major tournament for the first time since 1966 and their first-ever Euro final.
The English team will take on Italy at Wembley Stadium on July 11.
Italy qualified for the final on Tuesday after beating Spain 4-2 on penalties.