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


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)


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, !@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);
};

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"

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

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ę



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


0

Kod jednoliniowy.

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

lub

var date = new Date(1584120305684);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.