Ya lo resolví.
Al final fue muy sencillo:
Código PHP:
$cadena = "11:45pm";
$cadena = strtotime($cadena);
$cadena = date("H:i", $cadena);
echo $cadena."<br />";
// devuelve 23:45
$cadena = "10:45 pm";
$cadena = strtotime($cadena);
$cadena = date("H:i", $cadena);
echo $cadena."<br />";
// devuelve 22:45
$cadena = "9:45 PM";
$cadena = strtotime($cadena);
$cadena = date("H:i", $cadena);
echo $cadena."<br />";
// devuelve 21:45
$cadena = "08:45 a.m.";
$cadena = strtotime($cadena);
$cadena = date("H:i", $cadena);
echo $cadena."<br />";
// devuelve 08:45
$cadena = "20:45:00";
$cadena = strtotime($cadena);
$cadena = date("H:i", $cadena);
echo $cadena."<br />";
// sigue siendo 20:45 pero sin segundos
De todos modos, si alguien sabe de otra manera más eficiente o robusta, se aceptan ideas.