Konwertowanie milisekund na datę (jQuery / JavaScript)

197

Jestem trochę gadatliwy, ale postaram się to wyjaśnić -

Nudzę się, więc pracuję nad „shoutboxem” i jestem trochę zdezorientowany co do jednej rzeczy. Chcę uzyskać godzinę, o której wiadomość jest wprowadzana, i chcę się upewnić, że otrzymuję czas serwera, a przynajmniej upewnić się, że nie otrzymuję czasu lokalnego użytkownika. Wiem, że to nie ma znaczenia, ponieważ ta rzecz nie będzie używana przez nikogo poza mną, ale chcę być dokładna. Rozejrzałem się i przetestowałem kilka rzeczy i myślę, że jedynym sposobem na to jest uzyskanie milisekund od 1 stycznia 1970 r. 00:00:00 UTC , ponieważ byłoby to takie samo dla wszystkich.

Robię to tak:

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

Zwraca liczbę jak 1294862756114.

Czy istnieje sposób na przejście 1294862756114na bardziej czytelną datę, na przykład DD/MM/YYYY HH:MM:SS?

Zasadniczo szukam w języku JavaScript odpowiednika funkcji PHP date();.

Andrzej
źródło
4
jeśli nie chcesz mieć czasu lokalnego, dlaczego używasz do tego javascript? nie powinieneś tego robić na serwerze?
fazo
1
Sprawdź tę bibliotekę -> datejs.com (Sprawdź toString ())
Ryan
@fazo - To był mniej więcej projekt mający pomóc mi w ulepszeniu JS, więc staram się używać PHP w jak najmniejszym stopniu (mam nadzieję, że tylko do odczytu / zapisu danych do pliku).
Andrew
1
Myślę, że miał na myśli, że chce odpowiednio sformatować ciąg czasu?
Ryan,
2
?/?/1970 or whatever it is-> Epoka uniksowa ,1970-01-01T00:00:00Z
Camilo Martin

Odpowiedzi:

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
źródło
1
Czy jest jakaś korzyść z robienia tego w dwóch krokach? (Najpierw oblicz czas, a następnie wykorzystaj go jako argument dla daty). Czy nie otrzymujesz dokładnie tego samego wyniku po prostu var date = new Date (); ?
Per Quested Aronsson
11
OP polegał na konwertowaniu z kilku milisekund na Dateobiekt, co właśnie robi druga linia. Pierwsza linia to tylko sposób na uzyskanie rozsądnej liczby milisekund. Możesz też po prostu zrobić var date = new Date(0);.
Brian Donovan,
2
Czas musi być liczbą, a nie
ciągiem
152

Jeśli chcesz niestandardowe formatowanie daty, oferuję prostą funkcję :

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

Oto obsługiwane tokeny:

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

A oto kod:

//*** 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
źródło
37

Możesz po prostu nam użyć biblioteki Datejs , aby przekonwertować datę na żądany format.

Przeprowadziłem pary testów i to działa.

Poniżej znajduje się fragment ilustrujący, w jaki sposób możesz to osiągnąć:

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
źródło
3
Te przykłady nie wymagają Datejs, są częścią JavaScript. Ale działają i całkowicie spełniają odpowiedź. Dzięki!
Michael Elliott,
19

Poniżej znajduje się fragment umożliwiający sformatowanie daty do pożądanego wyniku:

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.
źródło
4
W JavaScript nie potrzebujesz średników. Jednak najlepszą praktyką jest ich używanie. Czasami bez nich znaczenie instrukcji może się zmienić (choć nie w tym przypadku). Niektórzy recenzenci kodu gorliwie ich kochają i walczą o ich obecność. Aby wszystko było proste, najlepiej zawsze ich używać.
Phil
7

Spróbuj użyć tego kodu:

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

Ciesz się

Kenlly Acosta
źródło
2

Spróbuj tego :

var time = new Date().toJSON();
abhi
źródło
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
źródło
3
Spróbuj wyjaśnić, dlaczego ta odpowiedź rozwiązuje problem, unikaj publikowania kodu.
Ivan
0

Załóżmy, że data jest liczbą milisekund 1526813885836, dzięki czemu można uzyskać dostęp do daty jako ciągu za pomocą tego przykładowego kodu:

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

Dla przejrzystości patrz poniższy kod:

const theTime = new Date(1526813885836);
console.log(theTime.toString());
AmerllicA
źródło
0

użyj datejs

new Date().toString('yyyy-MM-d-h-mm-ss');
smenon
źródło
0

Kod jednoliniowy.

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

lub

var date = new Date(1584120305684);
Ahmad Sharif
źródło