Función para convertir la marca de tiempo a fecha humana en javascript


82

¿Cómo convertir esta marca 1382086394000de tiempo para 2013-10-18 08:53:14usar una función en javascript? Actualmente tengo esta función:

function cleanDate(d) {return new Date(+d.replace(/\/Date\((\d+)\)\//, '$1'));}

10
Además de todas las respuestas aquí, el estándar de facto en js fecha / tiempo de manipulación actualmente es moment.js sorprende que nadie ha mencionado aquí
alonisser

2
@ alonisser: quizás porque convertir un valor de tiempo en una fecha es trivial. Formatearlo tampoco es particularmente difícil.
RobG

Respuestas:


128

El valor 1382086394000 es probablemente un valor de tiempo, que es el número de milisegundos desde 1970-01-01T00: 00: 00Z. Puede usarlo para crear un objeto de fecha ECMAScript usando el constructor de fecha :

var d = new Date(1382086394000);

La forma de convertir eso en algo legible depende de usted. Simplemente enviarlo a la salida debe llamar al método toString interno (y totalmente dependiente de la implementación) * que generalmente imprime la hora del sistema equivalente en una forma legible por humanos, por ejemplo

Fri Oct 18 2013 18:53:14 GMT+1000 (EST) 

En ES5 hay algunas otras opciones de formato integradas:

y así. Tenga en cuenta que la mayoría dependen de la implementación y serán diferentes en diferentes navegadores. Si desea el mismo formato en todos los navegadores, deberá formatear la fecha usted mismo, por ejemplo:

alert(d.getDate() + '/' + (d.getMonth()+1) + '/' + d.getFullYear());

* El formato de Date.prototype.toString se ha estandarizado en ECMAScript 2018 . Puede pasar un tiempo antes de que sea ubicuo en todas las implementaciones, pero al menos los navegadores más comunes lo admiten ahora.


También existe togmtstring (), pero en desuso. No entiendo por qué hay tolocalestring () como en JS, todo es local en el navegador. ¿O toLocaleString es una separación de Nodejs? Si usa JS del lado del servidor y la zona horaria entre el cliente y el servidor es diferente, ¿obtiene la zona del cliente?
Timo

1
@ timo: el uso de "locale" es un nombre inapropiado para un método que intenta presentar un formato que sea consistente con las preferencias de formato del usuario. Desafortunadamente, se basa en el idioma, que no es un determinante particularmente bueno del formato preferido. Sería preferible formatear las fechas según las preferencias del sistema para el formato de fecha en lugar del código de idioma mucho menos específico.
RobG

32

Esto funciona bien. Registrado en el chromenavegador:

var theDate = new Date(timeStamp_value * 1000);
dateString = theDate.toGMTString();
alert(dateString );

8
toGMTString () está en desuso, use toISOString () o toUTCString () en su lugar
Nicolas Leucci

Precaución * - *: no multiplicar por1000 . De lo contrario, ¡¡harás un hyperloop en el espacio futuro !!
vrintle

2
después de multiplicar 1586855504 con 1000 obtuve el resultado correcto, de lo contrario estaba proporcionando 1970
Warewolf

la multiplicación por 1000 depende de la marca de tiempo en segundos o milisegundos
Tejashwi Kalp Taru

27

por qué no simplemente

new Date (timestamp);

Una fecha es una fecha, el formato de la misma es un asunto diferente.


21

Moment.js puede convertir marcas de tiempo de Unix en cualquier formato personalizado

En este caso : var time = moment(1382086394000).format("DD-MM-YYYY h:mm:ss");

imprimirá 18-10-2013 11:53:14;

Aquí hay un plunker que demuestra esto.


Parece que esto es excesivo
ʎzɐɹƆ

Gracias. esto realmente me ayudó.
Akram Chauhan

13

Aquí están las formas simples de cada confusión de formato de fecha:

para la fecha actual:

var current_date=new Date();

para obtener la marca de tiempo de la fecha actual:

var timestamp=new Date().getTime();

para convertir una fecha particular en marca de tiempo:

var timestamp_formation=new Date('mm/dd/yyyy').getTime();

para convertir la marca de tiempo en Fecha:

    var timestamp=new Date('02/10/2016').getTime();
    var todate=new Date(timestamp).getDate();
    var tomonth=new Date(timestamp).getMonth()+1;
    var toyear=new Date(timestamp).getFullYear();
    var original_date=tomonth+'/'+todate+'/'+toyear;

  OUTPUT:
 02/10/2016

sí @melpomene, la mitad del código es irrelevante pero lo escribí para despejar más dudas sobre la formación de la fecha ... !!! y una cosa más que no lo copié de ningún lado. Lo probé en mi propio código y hace 2 días trabajé en él
Trojan

1
No importa si lo copió literalmente o no. El caso es que toda la información ya está en otra respuesta. Por cierto, su último ejemplo en realidad no produce el resultado que afirma que produce.
melpomene

La salida mostrada no coincide con la salida del código (2/10/2016)
Suyash Mittal

9

necesitamos crear una nueva función usando JavaScript.

function unixTime(unixtime) {

    var u = new Date(unixtime*1000);

      return u.getUTCFullYear() +
        '-' + ('0' + u.getUTCMonth()).slice(-2) +
        '-' + ('0' + u.getUTCDate()).slice(-2) + 
        ' ' + ('0' + u.getUTCHours()).slice(-2) +
        ':' + ('0' + u.getUTCMinutes()).slice(-2) +
        ':' + ('0' + u.getUTCSeconds()).slice(-2) +
        '.' + (u.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) 
    };

console.log(unixTime(1370001284))

2016-04-30 08:36:26.000

3

formatDate es la función a la que puede llamarla y pasar la fecha a la que desea formatear dd/mm/yyyy

var unformatedDate = new Date("2017-08-10 18:30:00");
 
$("#hello").append(formatDate(unformatedDate));
function formatDate(nowDate) {
	return nowDate.getDate() +"/"+ (nowDate.getMonth() + 1) + '/'+ nowDate.getFullYear();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="hello">


</div>


2

Esto es lo que hice para la API de Instagram. marca de tiempo convertida con el método de fecha multiplicando por 1000 y luego agregando todas las entidades individualmente como (año, meses, etc.)

creó el nombre de la lista de meses personalizado y se asignó con el getMonth()método que devuelve el índice del mes.

convertStampDate(unixtimestamp){

// Unixtimestamp

// Months array
var months_arr = ['January','February','March','April','May','June','July','August','September','October','November','December'];

// Convert timestamp to milliseconds
var date = new Date(unixtimestamp*1000);

// Year
var year = date.getFullYear();

// Month
var month = months_arr[date.getMonth()];

// Day
var day = date.getDate();

// Hours
var hours = date.getHours();

// Minutes
var minutes = "0" + date.getMinutes();

// Seconds
var seconds = "0" + date.getSeconds();

// Display date time in MM-dd-yyyy h:m:s format
var fulldate = month+' '+day+'-'+year+' '+hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);

// filtered fate
var convdataTime = month+' '+day;
return convdataTime;
}

Llamar con argumento de sello convertStampDate('1382086394000')

y eso es.


1

Mi variante ES6 produce una cadena como esta 2020-04-05_16:39:45.85725. No dude en modificar la declaración de devolución para obtener el formato que necesita:

const getDateStringServ = timestamp => {

  const plus0 = num => `0${num.toString()}`.slice(-2)

  const d = new Date(timestamp)

  const year = d.getFullYear()
  const monthTmp = d.getMonth() + 1
  const month = plus0(monthTmp)
  const date = plus0(d.getDate())
  const hour = plus0(d.getHours())
  const minute = plus0(d.getMinutes())
  const second = plus0(d.getSeconds())
  const rest = timestamp.toString().slice(-5)

  return `${year}-${month}-${date}_${hour}:${minute}:${second}.${rest}`
}

-2

Para calcular la fecha en la marca de tiempo a partir de la fecha dada

// Para obtener la fecha de la marca de tiempo de la fecha normal : En formato - 1560105000000

// la fecha de entrada puede tener el formato: "2019-06-09T18: 30: 00.000Z"

this.calculateDateInTimestamp = function (inputDate) {
    var date = new Date(inputDate);
    return date.getTime();
}

salida : 1560018600000

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.