Milisaniyeyi bir tarihe dönüştürme (jQuery / JavaScript)


197

Biraz hırsızım, ama bunu açık tutmaya çalışacağım -

Sıkıldım, bu yüzden bir "iletişim kutusu" üzerinde çalışıyorum ve bir şey hakkında biraz kafam karıştı. Bir iletinin girildiği saati almak istiyorum ve sunucu saatini aldığımdan veya en azından kullanıcının yerel saatini almadığımdan emin olmak istiyorum. Bunun önemli olmadığını biliyorum, çünkü bu şey benim dışımda kimse tarafından kullanılmayacak, ama ayrıntılı olmak istiyorum. Etrafa baktım ve birkaç şeyi test ettim ve bence bunu yapmanın tek yolu, 1 Ocak 1970 00:00:00 UTC'den bu yana geçen milisaniyeyi elde etmektir , çünkü bu herkes için aynı olurdu.

Bunu şu şekilde yapıyorum:

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

Bu gibi bir sayı döndürür 1294862756114 .

1294862756114Daha okunabilir bir tarihe dönüştürmenin bir yolu var mı , meselaDD/MM/YYYY HH:MM:SS ?

Yani, temelde, PHP'nin PHP date();işlevinin eşdeğerini arıyorum .


4
yerel zamana sahip olmak istemiyorsanız, neden javascript kullanıyorsunuz? sunucuda yapmamalısın?
fazo

1
Bu kütüphaneye göz atın -> datejs.com (Check to to Trtring ())
Ryan

@fazo - Bu az ya da çok JS ile daha iyi olmama yardımcı bir proje oldu, bu yüzden PHP mümkün olduğunca az kullanmaya çalışıyorum (umarım sadece bir dosyaya veri okumak / yazmak için).
Andrew

1
Sanırım zaman dizesini buna göre biçimlendirmek istiyordu?
Ryan

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

Yanıtlar:


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
İki adımda yapmanın bir avantajı var mı? (Önce zamanı hesaplayın, sonra tarih için bir argüman olarak kullanın). Sadece var date = new Date () ile tam olarak aynı sonucu elde etmeyin ; ?
Quest Quest Aronsson

11
OP, birkaç milisaniyeden bir Datenesneye, ikinci satırın yaptığı şeye dönüştürmekle ilgiliydi . İlk satır, mantıklı bir milisaniye elde etmenin bir yoludur. Sadece yapabilirsin var date = new Date(0);.
Brian Donovan

2
Zaman bir sayı olmalı, String değil
Nicolas S.Xu

152

Tarihiniz için özel biçimlendirme istiyorsanız , bunun için basit bir işlev sunuyoruz :

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

Desteklenen jetonlar şunlardır:

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

Ve işte 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

Sadece bize Datejs istediğiniz formata tarihi dönüştürmek için kütüphane.

Ben test çiftleri çalıştırın ve işe yarıyor.

Aşağıda bunu nasıl başarabileceğinizi gösteren bir pasaj bulunmaktadır:

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"

4
Bu örnekler Datejs gerektirmez, JavaScript'in bir parçasıdır. Ama çalışıyorlar ve cevabı tamamen tatmin ediyorlar. Teşekkürler!
Michael Elliott

19

Tarihi istenen bir çıktıya biçimlendirmenizi sağlayan bir snippet aşağıdadır:

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
JavaScript'te noktalı virgüllere ihtiyacınız yoktur. Ancak, bunları kullanmak için en iyi uygulama. Bazen, onlarsız, bir ifadenin anlamı değişebilir (bu durumda olmasa da). Bazı kod eleştirmenleri onları gayretle seviyor ve varlıkları için savaşıyorlar. İşleri basit tutmak için, her zaman kullanmak en iyisidir.
Phil


7

Bu kodu kullanmayı deneyin:

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

Tadını çıkar!


2

Bunu dene :

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
Bu cevabın neden sorunu çözdüğünü açıklamaya çalışın, sadece kodu göndermekten kaçının.
Ivan

0

Tarihi, milisaniye tarihi olarak kabul edin 1526813885836, böylece tarihe şu örnek kodla dize olarak erişebilirsiniz:

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

Açıklık için aşağıdaki koda bakın:

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

0

datejs kullan

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

0

Bir satır kodu.

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

veya

var date = new Date(1584120305684);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.