Si encuentras alguna incompatibilidad en tu código o trabajo, recuerda probar siempre en un entorno de testing antes añadir el código al trabajo final.
Solución:
El valor de tiempo de los marcadores de Chrome es microsegundos a partir de una época de 1601-01-01T00:00:00Z. Para convertir a una fecha:
- Divida por 1000 para obtener milisegundos
- Ajustar a una época de 1970-01-01T00:00:00Z
- Pase el valor resultante al constructor Fecha
P.ej
var timeValue = '13170147422089597';
new Date(Date.UTC(1601,0,1) + timeValue / 1000); // 2018-05-07T06:17:02.089Z
Almacenar el valor Date.UTC(1601,0,1) como una constante (-11644473600000) y convertirlo en una función da:
function chromeTimeValueToDate(tv)
var epoch = -11644473600000;
return new Date(epoch + tv / 1000);
// Example
['13170147422089597',
'13150297844686316',
'13115171381595644'].forEach( tv =>
console.log(chromeTimeValueToDate(tv))
);
Es WebKit/Chrome Timestamp, que representa microsegundos desde el 1/1/1601 UTC.
Viene de Windows NT Timestamp (como 100 nanosegundos desde 1601/1/1 UTC), disponible como estructura FileTime.
Hay un convertidor de marca de tiempo WebKit/Chrome en línea en https://www.epochconverter.com/webkit
que proporciona su código allí también.
Sin embargo, el código está en Python2, así que lo transcribo a Python3 de la siguiente manera:
import datetime
def date_from_webkit(webkit_timestamp):
epoch_start = datetime.datetime(1601,1,1)
delta = datetime.timedelta(microseconds=int(webkit_timestamp))
print(epoch_start + delta) # py3 requires () for print
date_from_webkit(int(input('Enter a Webkit timestamp to convert: '))) # py3 integrates raw_input() and input() into input()
Tienes la posibilidad recomendar este tutorial si lograste el éxito.