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'));}
Willy Mularto
fuente
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.

RobG
fuente
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 );
Optimus Krish
fuente
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.

Wombat aterrador
fuente
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.

svarog
fuente
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
Troyano
fuente
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
KARTHIKEYAN.A
fuente
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>

Mamba negro
fuente
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.

Hidayt Rahman
fuente
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}`
}
romano
fuente
-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

Athar
fuente