The tilde matches the most recent patch version in the specified minor version.
~1.2.3 will match all 1.2.x versions but will miss 1.3.0.
The caret, on the other hand, is more relaxed. It will update you to the most recent minor version in the specified major version.
^1.2.3 will match any 1.x.x release including 1.3.0, but will hold off on 2.0.0.