Conversión de milisegundos a una fecha (jQuery / JavaScript)

197

Soy un poco inestable, pero trataré de mantener esto claro.

Estoy aburrido, así que estoy trabajando en un "shoutbox" , y estoy un poco confundido por una cosa. Quiero obtener la hora en que se ingresa un mensaje, y quiero asegurarme de que obtengo la hora del servidor, o al menos asegurarme de que no obtengo la hora local del usuario. Sé que no importa, ya que esta cosa no será utilizada por nadie más que yo, pero quiero ser minucioso. Miré a mi alrededor y probé algunas cosas, y creo que la única forma de hacerlo es obtener los milisegundos desde el 1 de enero de 1970 a las 00:00:00 UTC , ya que eso sería lo mismo para todos.

Estoy haciendo eso así:

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

Eso devuelve un número como 1294862756114.

¿Hay alguna manera de convertir 1294862756114a una fecha más legible, como DD/MM/YYYY HH:MM:SS?

Entonces, básicamente, estoy buscando el equivalente de JavaScript de la date();función de PHP .

Andrés
fuente
44
si no quieres tener hora local, entonces ¿por qué usas JavaScript? ¿No deberías hacerlo en el servidor?
fazo
1
Echa un vistazo a esta biblioteca -> datejs.com ( echa un vistazo a toString ())
Ryan
@fazo: este fue más o menos un proyecto destinado a ayudarme a mejorar con JS, por lo que estoy tratando de usar PHP lo menos posible (con suerte solo para leer / escribir datos en un archivo).
Andrew
1
¿Creo que quiso decir que quiere formatear la cadena de tiempo en consecuencia?
Ryan
2
?/?/1970 or whatever it is-> Unix Epoch ,1970-01-01T00:00:00Z
Camilo Martin

Respuestas:

304

    var time = new Date().getTime();
    var date = new Date(time);
    alert(date.toString()); // Wed Jan 12 2011 12:42:46 GMT-0800 (PST)

Brian Donovan
fuente
1
¿Hay alguna ventaja en dos pasos? (Primero calculando el tiempo, luego usándolo como argumento para la fecha). ¿No obtienes exactamente el mismo resultado con solo var date = new Date (); ?
Por Quested Aronsson
11
El OP consistía en convertir de varios milisegundos a un Dateobjeto, que es lo que hace la segunda línea. La primera línea es solo una forma de obtener un número razonable de milisegundos. También podrías simplemente hacer var date = new Date(0);.
Brian Donovan
2
El tiempo tiene que ser un Número, no una Cadena
Nicolas S.Xu
152

Si desea un formato personalizado para su fecha, le ofrezco una función simple :

var now = new Date;
console.log( now.customFormat( "#DD#/#MM#/#YYYY# #hh#:#mm#:#ss#" ) );

Aquí están los tokens compatibles:

token:     description:             example:
#YYYY#     4-digit year             1999
#YY#       2-digit year             99
#MMMM#     full month name          February
#MMM#      3-letter month name      Feb
#MM#       2-digit month number     02
#M#        month number             2
#DDDD#     full weekday name        Wednesday
#DDD#      3-letter weekday name    Wed
#DD#       2-digit day number       09
#D#        day number               9
#th#       day ordinal suffix       nd
#hhhh#     2-digit 24-based hour    17
#hhh#      military/24-based hour   17
#hh#       2-digit hour             05
#h#        hour                     5
#mm#       2-digit minute           07
#m#        minute                   7
#ss#       2-digit second           09
#s#        second                   9
#ampm#     "am" or "pm"             pm
#AMPM#     "AM" or "PM"             PM

Y aquí está el código:

//*** This code is copyright 2002-2016 by Gavin Kistner, [email protected]
//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
Date.prototype.customFormat = function(formatString){
  var YYYY,YY,MMMM,MMM,MM,M,DDDD,DDD,DD,D,hhhh,hhh,hh,h,mm,m,ss,s,ampm,AMPM,dMod,th;
  YY = ((YYYY=this.getFullYear())+"").slice(-2);
  MM = (M=this.getMonth()+1)<10?('0'+M):M;
  MMM = (MMMM=["January","February","March","April","May","June","July","August","September","October","November","December"][M-1]).substring(0,3);
  DD = (D=this.getDate())<10?('0'+D):D;
  DDD = (DDDD=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"][this.getDay()]).substring(0,3);
  th=(D>=10&&D<=20)?'th':((dMod=D%10)==1)?'st':(dMod==2)?'nd':(dMod==3)?'rd':'th';
  formatString = formatString.replace("#YYYY#",YYYY).replace("#YY#",YY).replace("#MMMM#",MMMM).replace("#MMM#",MMM).replace("#MM#",MM).replace("#M#",M).replace("#DDDD#",DDDD).replace("#DDD#",DDD).replace("#DD#",DD).replace("#D#",D).replace("#th#",th);
  h=(hhh=this.getHours());
  if (h==0) h=24;
  if (h>12) h-=12;
  hh = h<10?('0'+h):h;
  hhhh = hhh<10?('0'+hhh):hhh;
  AMPM=(ampm=hhh<12?'am':'pm').toUpperCase();
  mm=(m=this.getMinutes())<10?('0'+m):m;
  ss=(s=this.getSeconds())<10?('0'+s):s;
  return formatString.replace("#hhhh#",hhhh).replace("#hhh#",hhh).replace("#hh#",hh).replace("#h#",h).replace("#mm#",mm).replace("#m#",m).replace("#ss#",ss).replace("#s#",s).replace("#ampm#",ampm).replace("#AMPM#",AMPM);
};
Phrogz
fuente
37

Simplemente puede usar la biblioteca de Datejs para convertir la fecha al formato deseado.

He corrido parejas de prueba y funciona.

A continuación se muestra un fragmento que ilustra cómo puede lograr eso:

var d = new Date(1469433907836);

d.toLocaleString(); // expected output: "7/25/2016, 1:35:07 PM"

d.toLocaleDateString(); // expected output: "7/25/2016"

d.toDateString();  // expected output: "Mon Jul 25 2016"

d.toTimeString(); // expected output: "13:35:07 GMT+0530 (India Standard Time)"

d.toLocaleTimeString(); // expected output: "1:35:07 PM"
Ravindra
fuente
44
Esos ejemplos no requieren Datejs, son parte de JavaScript. Pero funcionan y satisfacen totalmente la respuesta. ¡Gracias!
Michael Elliott
19

A continuación hay un fragmento para permitirle formatear la fecha a una salida deseable:

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

var theyear = time.getFullYear();
var themonth = time.getMonth() + 1;
var thetoday = time.getDate();

document.write("The date is: ");
document.write(theyear + "/" + themonth + "/" + thetoday);
John K.
fuente
44
No necesita punto y coma en JavaScript. Sin embargo, es una buena práctica usarlos. A veces, sin ellos, el significado de una declaración puede cambiar (aunque no en este caso). Algunos revisores de código los aman celosamente y luchan por su presencia. Para mantener las cosas simples, es mejor usarlas siempre.
Phil
7

Intenta usar este código:

var milisegundos = parseInt(data.replace("/Date(", "").replace(")/", ""));
var newDate = new Date(milisegundos).toLocaleDateString("en-UE");

¡Disfrútala!

Kenlly Acosta
fuente
2

Prueba este:

var time = new Date().toJSON();
abhi
fuente
0
/Date(1383066000000)/

function convertDate(data) {
    var getdate = parseInt(data.replace("/Date(", "").replace(")/", ""));
    var ConvDate= new Date(getdate);
    return ConvDate.getDate() + "/" + ConvDate.getMonth() + "/" + ConvDate.getFullYear();
}
Joh
fuente
3
Intente explicar por qué esta respuesta resuelve el problema, evite simplemente publicar el código.
Ivan
0

Suponga que la fecha es la fecha en milisegundos 1526813885836, para que pueda acceder a la fecha como una cadena con este código de muestra:

console.log(new Date(1526813885836).toString());

Para mayor claridad, vea el siguiente código:

const theTime = new Date(1526813885836);
console.log(theTime.toString());
AmerllicA
fuente
0

use datejs

new Date().toString('yyyy-MM-d-h-mm-ss');
Smenon
fuente
0

Código de una línea

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

o

var date = new Date(1584120305684);
Ahmad Sharif
fuente