Conversion de millisecondes en date (jQuery / JavaScript)

197

Je suis un peu un randonneur, mais je vais essayer de garder cela clair -

Je m'ennuie, donc je travaille sur une "shoutbox" , et je suis un peu confus sur une chose. Je veux obtenir l'heure à laquelle un message est entré et je veux m'assurer que j'obtiens l'heure du serveur, ou du moins m'assurer que je n'obtiens pas l'heure locale de l'utilisateur. Je sais que cela n'a pas d'importance, car cette chose ne sera utilisée par personne d'autre que moi, mais je veux être minutieux. J'ai regardé autour de moi et testé quelques choses, et je pense que la seule façon de le faire est d'obtenir les millisecondes depuis le 1er janvier 1970 00:00:00 UTC , car ce serait la même chose pour tout le monde.

Je fais ça comme ça:

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

Cela renvoie un nombre comme 1294862756114.

Existe-t-il un moyen de convertir 1294862756114vers une date plus lisible, commeDD/MM/YYYY HH:MM:SS ?

Donc, fondamentalement, je cherche l'équivalent JavaScript de la date();fonction PHP .

Andrew
la source
4
si vous ne voulez pas avoir d'heure locale, pourquoi utiliser javascript pour cela? ne devriez-vous pas le faire sur le serveur?
fazo
1
Consultez cette bibliothèque -> datejs.com ( consultez toString ())
Ryan
@fazo - C'était plus ou moins un projet destiné à m'aider à m'améliorer avec JS, donc j'essaie d'utiliser PHP le moins possible (j'espère seulement pour lire / écrire des données dans un fichier).
Andrew
1
Je pense qu'il voulait dire qu'il veut formater la chaîne de temps en conséquence?
Ryan
2
?/?/1970 or whatever it is-> Unix Epoch ,1970-01-01T00:00:00Z
Camilo Martin

Réponses:

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
la source
1
Y a-t-il un avantage à le faire en deux étapes? (Calculer d'abord l'heure, puis l'utiliser comme argument pour la date). N'obtenez-vous pas exactement le même résultat en var simplement date = new Date (); ?
Per Quested Aronsson
11
L'OP consistait à convertir un nombre de millisecondes en Dateobjet, ce que fait la deuxième ligne. La première ligne est juste un moyen d'obtenir un nombre raisonnable de millisecondes. Vous pouvez également le faire var date = new Date(0);.
Brian Donovan
2
Le temps doit être un nombre, pas une chaîne
Nicolas S.Xu
152

Si vous souhaitez un formatage personnalisé pour votre date, je vous propose une fonction simple :

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

Voici les jetons pris en charge:

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

Et voici le code:

//*** 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
la source
37

Vous pouvez simplement utiliser la bibliothèque Datejs pour convertir la date au format souhaité.

J'ai couru des couples de test et ça marche.

Vous trouverez ci-dessous un extrait illustrant comment vous pouvez y parvenir:

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
la source
4
Ces exemples ne nécessitent pas de Datejs, ils font partie de JavaScript. Mais ils fonctionnent et satisfont totalement la réponse. Merci!
Michael Elliott
19

Vous trouverez ci-dessous un extrait pour vous permettre de formater la date en une sortie souhaitée:

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.
la source
4
Vous n'avez pas besoin de points-virgules en JavaScript. Cependant, il est préférable de les utiliser. Parfois, sans eux, la signification d'une déclaration peut changer (pas dans ce cas cependant). Certains réviseurs de code les aiment avec zèle et se battent pour leur présence. Pour garder les choses simples, il est préférable de toujours les utiliser.
Phil
7

Essayez d'utiliser ce code:

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

Profitez-en!

Kenlly Acosta
la source
2

Essaye celui-là :

var time = new Date().toJSON();
abhi
la source
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
la source
3
Essayez d'expliquer pourquoi cette réponse résout le problème, évitez simplement de publier le code.
Ivan
0

Supposons que la date est en millisecondes 1526813885836, afin que vous puissiez accéder à la date sous forme de chaîne avec cet exemple de code:

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

Pour la clarté, voir le code ci-dessous:

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

utiliser datejs

new Date().toString('yyyy-MM-d-h-mm-ss');
smenon
la source
0

Un code de ligne.

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

ou

var date = new Date(1584120305684);
Ahmad Sharif
la source