Konvertieren von Millisekunden in ein Datum (jQuery / JavaScript)


197

Ich bin ein bisschen ein Wanderer, aber ich werde versuchen, dies klar zu halten -

Mir ist langweilig, also arbeite ich an einer "Shoutbox" und ich bin ein wenig verwirrt über eine Sache. Ich möchte die Zeit abrufen, zu der eine Nachricht eingegeben wird, und ich möchte sicherstellen, dass ich die Serverzeit erhalte, oder zumindest sicherstellen, dass ich nicht die Ortszeit des Benutzers erhalte. Ich weiß, dass es keine Rolle spielt, da dieses Ding von niemandem außer mir benutzt wird, aber ich möchte gründlich sein. Ich habe mich umgesehen und ein paar Dinge getestet, und ich denke, der einzige Weg, dies zu tun, besteht darin, die Millisekunden seit dem 1. Januar 1970 00:00:00 UTC zu erhalten , da dies für alle gleich wäre.

Ich mache das so:

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

Das gibt eine Zahl wie zurück 1294862756114.

Gibt es eine Möglichkeit, 1294862756114auf ein besser lesbares Datum umzustellen, wie z DD/MM/YYYY HH:MM:SS.

Im Grunde suche ich nach JavaScript, das der PHP- date();Funktion entspricht.


4
Wenn Sie keine Ortszeit haben möchten, warum verwenden Sie dann Javascript dafür? solltest du es nicht auf dem Server machen?
Fazo

1
Überprüfen Sie diese Bibliothek aus -> datejs.com (Check out toString ())
Ryan

@fazo - Dies war mehr oder weniger ein Projekt, das mir helfen sollte, mit JS besser zu werden. Deshalb versuche ich, PHP so wenig wie möglich zu verwenden (hoffentlich nur, um Daten in eine Datei zu lesen / schreiben).
Andrew

1
Ich denke, er meinte, dass er die Zeitzeichenfolge entsprechend formatieren möchte?
Ryan

2
?/?/1970 or whatever it is-> Unix Epoch ,1970-01-01T00:00:00Z
Camilo Martin

Antworten:


304

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


1
Gibt es einen Vorteil in zwei Schritten? (Zuerst die Zeit berechnen, dann als Argument für das Datum verwenden). Erhalten Sie nicht genau das gleiche Ergebnis, wenn Sie nur var date = new Date (); ?
Per Quested Aronsson

11
Beim OP ging es darum, von einer Anzahl von Millisekunden in ein DateObjekt zu konvertieren , was in der zweiten Zeile der Fall ist. Die erste Zeile ist nur ein Weg, um eine vernünftige Anzahl von Millisekunden zu erhalten. Sie könnten auch einfach tun var date = new Date(0);.
Brian Donovan

2
Die Zeit muss eine Zahl sein, keine
Zeichenfolge

einfach tundate.toISOString()
Andy B

152

Wenn Sie eine benutzerdefinierte Formatierung für Ihr Datum wünschen, biete ich eine einfache Funktion dafür an:

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

Hier sind die unterstützten Token:

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

Und hier ist der Code:

//*** This code is copyright 2002-2016 by Gavin Kistner, !@phrogz.net
//*** 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);
};

Ich habe "# hhh # Militär / 24-Stunden-Stunde 17" verwendet. Könnten Sie eine Lösung finden, die auch führende Nullen in diesem Format enthält? Vielen Dank!
Tellob

1
Ich habe diese Zeile nach AMPM hinzugefügt: if (hhh <10) hhh = ('0' + hhh);
Tellob

Vielleicht könnten Sie einfach Ihre Funktionen in der Post erweitern.
Tellob

1
@tellob Ich habe den obigen Code bearbeitet, um ihn #hhhh#als 0-aufgefüllte Version von hinzuzufügen #hhh#.
Phrogz

Wie wäre es mit dem Urheberrecht, dürfen wir das verwenden?
雨伞 雨伞

37

Sie können einfach die Datejs- Bibliothek verwenden, um das Datum in das gewünschte Format zu konvertieren.

Ich habe Testpaare durchgeführt und es funktioniert.

Unten sehen Sie einen Ausschnitt, der zeigt, wie Sie dies erreichen können:

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"

3
Diese Beispiele erfordern keine Datejs, sie sind Teil von JavaScript. Aber sie funktionieren und erfüllen die Antwort voll und ganz. Vielen Dank!
Michael Elliott

19

Unten finden Sie einen Ausschnitt, mit dem Sie das Datum auf eine gewünschte Ausgabe formatieren können:

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);

4
In JavaScript benötigen Sie keine Semikolons. Es ist jedoch die beste Vorgehensweise, sie zu verwenden. Manchmal kann sich ohne sie die Bedeutung einer Aussage ändern (in diesem Fall jedoch nicht). Einige Code-Rezensenten lieben sie eifrig und kämpfen um ihre Anwesenheit. Um die Dinge einfach zu halten, ist es am besten, sie immer zu verwenden.
Phil


7

Versuchen Sie es mit diesem Code:

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

Geniesse es!


2

Probier diese :

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

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();
}

3
Versuchen Sie zu erklären, warum diese Antwort das Problem löst. Vermeiden Sie es, nur den Code zu veröffentlichen.
Ivan

Für mich kommt es 1 Monat weniger zurück?
Abdul Qayyum

0

Angenommen, das Datum ist ein Millisekunden-Datum 1526813885836, sodass Sie mit diesem Beispielcode auf das Datum als Zeichenfolge zugreifen können:

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

Zur Klarheit siehe folgenden Code:

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

0

benutze datejs

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

0

Ein Zeilencode.

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

oder

var date = new Date(1584120305684);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.