Análisis de cadena de fecha de Javascript
Una de mis funciones favoritas de PHP es el strtotime
función. Esta función le permite pasar una cadena de fecha y devolver una marca de tiempo de Unix
$time = strtotime('2021-04-01');
echo date('c',$time),"\n";
// outputs
// 2021-04-01T00:00:00-07:00
Lo bueno de esto es que funciona con una variedad de formatos de fecha.
$time = strtotime('04/01/2021');
echo date('c',$time),"\n";
// outputs
// 2021-04-01T00:00:00-07:00
Y no se preocupe:si son todos objetos todo el tiempo, el mismo comportamiento de análisis de cadenas funciona con DateTime
de PHP. clase.
$date = new DateTime('April 1, 2020');
echo $date->format('c'),"\n";
// outputs
// 2020-04-01T00:00:00-07:00
Con strtotime
si está trabajando con datos incompletos (en otras palabras, datos reales), tiene un poco más de confianza en que su código seguirá funcionando cuando/si su código encuentra un formato de fecha inesperado.
Fecha.parse de Javascript
Javascript tiene una funcionalidad similar integrada en su Date
objeto. Desafortunadamente, hay algunos casos extraños en torno a las zonas horarias que lo hacen poco confiable. Todos los siguientes ejemplos usan un REPL de Node.js 14.2, pero deberían aplicarse en general a las versiones modernas de javascript.
En javascript, puede usar el Date.parse
para analizar automáticamente una cadena de fecha y recuperar una marca de tiempo de Unix, o puede pasar una cadena directamente al Date
función constructora del objeto.
$ node
Welcome to Node.js v14.2.0.
Type ".help" for more information.
> Date.parse('April 1, 2021')
1617260400000
> new Date('April 1, 2021')
2021-04-01T07:00:00.000Z
Inmediatamente vemos algunas pequeñas diferencias con respecto a strtotime
. Primero, javascript informa sus marcas de tiempo de época de Unix en milisegundos, no en segundos. En segundo lugar, el formato de fecha ISO de javascript (el 'c'
formato en PHP stringToTime
) siempre informa utilizando la hora UTC (indicada por el Z
final) ), donde PHP informa el desplazamiento de la zona horaria desde UTC. Así que estas dos cadenas de fecha ISO