Choose orthonormal bases $(E_1, E_2)$ and $(F_1, F_2)$ for the two planes. Then, the (hyper)volume of the parallelepiped spanned by the $E_1, E_2, F_1, F_2$ on the one hand is $\sin \theta$ where $\theta$ is the angle between the two planes, and on the other hand is (the absolute value of) the determinant of the matrix given by adjoining the four vectors:
$|\det[E_1 \, E_2 \, F_1 \, F_2]|$.
This quantity is independent of the choices of orthogonal bases, and in fact, we can even take the bases of the planes to be any that span parallelograms of unit area, so we don't need to produce an orthogonal basis.
If we start out with any bases $(E_i)$ or $(F_i)$, say ones that span areas $\lambda$ and $\mu$, we can always normalize them by rescaling vectors, but we might as well build this into our equation: The bases $(\lambda^{-1} E_1, E_2)$ and $(\mu^{-1} F_1, F_2)$ both span parallelograms of unit area, so for general bases the hypervolume is
$\sin \theta = |\det[\lambda^{-1} E_1 \, E_2 \, \mu^{-1} F_1 \, F_2]| = \frac{|\det[E_1 \, E_2 \, F_1 \, F_2]|}{\lambda \mu}$,
which we might write as
$\color{red}{\sin \theta = \dfrac{|\det[E_1 \, E_2 \, F_1 \, F_2]|}{|E_1 \wedge E_2| |F_1 \wedge F_2|}}$,
where $|G_1 \wedge G_2|$ denotes the area of the parallelograms spanned by $G_1, G_2$.
This generalizes readily to formulas the angle between $k$-planes and $(n - k)$-planes in vector spaces of dimension $n$ (try this for the familiar situation $n = 2$, $k = 1$), and with just a little more work to finding the angle between $k$- and $l$- planes in vector spaces of dimension more than $k + l$.
Remark This leaves the matter of computing explicitly the areas $|G_1 \wedge G_2|$ of the parallelograms the bases defime. The area $A$ of the parallelogram defined by vectors $H_1 = (x_1, y_1), H_2 = (x_2, y_2)$ in the plane is
$A = \left\vert\det \left(\begin{array}{cc} x_1 & x_2 \\ y_1 & y_2\end{array}\right)\right\vert = |x_1 y_2 - x_2 y_1|$, and its square is $A^2 = (x_1 y_2 - x_2 y_1)^2$, which we can rewrite as
$A^2 = [(x, y) \cdot (x, y)] [(x', y') \cdot (x', y')] - [(x, y) \cdot (x', y')]^2 = (H_1 \cdot H_1) (H_2 \cdot H_2) - (H_1 \cdot H_2)^2$.
Now, the formula $A^2 = (H_1 \cdot H_1) (H_2 \cdot H_2) - (H_1 \cdot H_2)^2$ doesn't depend on coordinates, it just uses the Euclidean structure (namely the dot product $\cdot\,$), so it works just as well for computing the areas of the parallelograms in our original problem, that is, we may write
$|G_1 \wedge G_2|^2 = (G_1 \cdot G_1) (G_2 \cdot G_2) - (G_1 \cdot G_2)^2$
and then take square roots if we like.
Best Answer
There's a simple formula for the angle between $A$ (a $j$-blade representing some subspace of $\Bbb R^n$) and $B$ (a $k$-blade representing some other subspace of $\Bbb R^n$), where $j\le k$, given by $$\cos(\theta) = \dfrac{\|A\ \raise .2em{\lrcorner}\ B\|}{\|A\|\|B\|}$$ where $\raise .2em{\lrcorner}$ is the left contraction product.
But because you're not familiar with geometric algebra, I'll try to give you just enough (non-rigorous) definitions so that you can calculate the angle between any two subspaces of $\Bbb R^n$.
Definitions:
Wedge Product: We define the wedge product, denoted $a\wedge b$, of two vectors $a, b\in \Bbb R^n$ as an object that is neither a vector nor a scalar and obeys all of the following: $$\begin{align}a \wedge b &= -b \wedge a \\ a\wedge(b\wedge c) &= (a\wedge b)\wedge c \\ a\wedge a &= 0 \\ k(a\wedge b) &= (ka)\wedge b = a\wedge (kb) \tag{$k\in \Bbb R$}\\ a\wedge (b+c) &= a\wedge b + a\wedge c\end{align}$$
Blade: An object formed by the wedge product of $k$ vectors is called a $k$-blade. We define scalars as $0$-blades, vectors as $1$-blades, objects that can be written as $a\wedge b$ as $2$-blades, objects that can be written as $a\wedge b\wedge c$ as $3$-blades, etc.
$k$-vector: A $k$-vector is a linear combination of $k$-blades.
Multivector: A multivector is a linear combination of $k$-vectors.
Grade: Objects in the algebra we're building have "grades". All $k$-blades/ $k$-vectors have grade $k$. But multivectors are in general multigraded objects. For instance, $B = b_0 + b_1e_1 + b_2 e_2 + b_{12}e_1\wedge e_2$, where $b_i$ are scalars and $e_i$ are vectors, is a multigraded object.
Clifford product: The Clifford product is an associative product of multivectors satisfying: $$ab = a\cdot b + a\wedge b \\ (AB)C = A(BC) \\ k(AB) = (kA)B = A(kB) \\ A(B+C) = AB+AC$$ for all vectors $a,b$, scalars $k$, and multivectors $A,B,C$.
Grade projection: The grade projection operator, denoted $\langle A \rangle_i$, returns the grade $i$ parts of the multivector $A$. For instance, $\langle ab\rangle_0 = \langle a\cdot b + a\wedge b\rangle_0 = a\cdot b$.
Norm: The norm of a multivector can be determined in the standard way after decomposing it into an orthonormal basis. For instance, if $A = a_0 + a_1e_1 + a_2e_2 + a_{12}e_1 \wedge e_2$ then $$\|A\| = \sqrt{a_0^2 + a_1^2 + a_2^2 + a_{12}^2}$$
Left contraction: The left contraction product of a $j$-blade $A$ and a $k$-blade $B$ is defined as $$A\ \raise .2em{\lrcorner}\ B = \langle AB\rangle_{k-j}$$
Now for an example. Consider the plane spanned by $a=2e_1 +3e_3$ and $b=e_2+e_3$ and the line spanned by $c=2e_1$.
Then the angle between that line and that plane is given by $$\cos(\theta) = \frac{\|c\ \raise .2em{\lrcorner}\ (a\wedge b)\|}{\|c\|\|a\wedge b\|}$$
So let's calculate it:
$$a\wedge b = (2e_1 +3e_3)\wedge (e_2+e_3) = 2e_1\wedge e_2 + 2e_1\wedge e_3 + 3e_3\wedge e_2 = 2e_1e_2 + 2e_1e_3 - 3e_2e_3 \\ \|a\wedge b\| = \sqrt{4+4+9} = \sqrt{17} \\ \|c\| = \sqrt{4} =2 \\ c\ \raise .2em{\lrcorner}\ (a\wedge b) = \langle (2e_1)(2e_1e_2 + 2e_1e_3 - 3e_2e_3)\rangle_1 = \langle 4e_2 + 4e_3 - 6e_1e_2e_3\rangle_1 = 4e_2 + 4e_3 \\ \|c\ \raise .2em{\lrcorner}\ (a\wedge b)\| = \sqrt{16+16} = \sqrt{32} \\ \implies \theta = \arccos\left(\frac{\sqrt{32}}{2\sqrt{17}}\right) \approx 46.7°$$