2017-12-28 10 views
0

Wenn ich new Date() erhalte ich:So konvertieren Sie kurze Daten in dieses Format: DDD MMM TT JJJJ GMT + 0800 (X Länderstandardzeit)?

Thu Dec 28 2017 10:17:58 GMT+0800 (台北標準時間) 

Wenn ich .valueOf() zu diesem Zeitpunkt gelten die ich erhalten:

1514427724039 

das ist, was ich will.

Jetzt muss ich .valueOf() auf ein Datum wie dieses anwenden: 2017/12/28. Ich habe versucht, Luxon mit dem Datum zu konvertieren (seit .valueOf() zu YYYY Anlege/MM/DD keine Zahl erzeugen):

DateTime.fromISO(startDate.replace(/\//g, '-')).toRFC2822() 
// => Thu, 28 Dec 2017 00:00:00 +0800 

jedoch valueOf() Anwendung, die die gleiche Zeichenfolge Ergebnisse. Keine Nummer wie im ersten Beispiel.

Was soll ich tun, damit ich einen numerischen Wert von YYYY/MM/DD erzeugen kann? Just habe ich mit DDD MMM DD YYYY GMT+0800 (X country standard time)?

+0

haben Sie mit 'moment.js' versuchen? Ich bin mir ziemlich sicher, es wird dir helfen. Link: https://momentjs.com/docs/ – VicJordan

+0

https://www.w3schools.com/jsref/jsref_obj_date.asp –

+0

'DateTime.fromISO (startDate.replace (/ \ // g, '-')). valueOf() 'https://moment.github.io/luxon/docs/class/src/datetime.js~DateTime.html#instance-method-valueOf – Slai

Antwort

1

Ich denke, Sie verlieren die Spur der Typen.

fromISO() gibt Luxon DateTime-Objekt zurück, aber toRFC2822 gibt eine RFC 2822-Zeichenfolgendarstellung des Datums zurück.

So wurde Ihre valueOf() an der Zeichenfolge aufgerufen, nicht die DateTime.

Wie andere darauf hingewiesen haben, müssen Sie nur valueOf() über das Ergebnis fromISO() aufrufen.

Zur Veranschaulichung:

var dt = luxon.DateTime.fromISO('2017-12-05'); // returns a Luxon DateTime object 
 
console.log('fromISO returns an', typeof dt); 
 

 
var rfc = dt.toRFC2822(); // returns a string 
 
console.log('toRFC2822 returns a', typeof rfc); 
 

 
var valueOfRFC = rfc.valueOf(); // string.valueOf() is just that string 
 
console.log('strings are their own values?', rfc === valueOfRFC); 
 

 
var valueOfDT = dt.valueOf(); // this is what you want 
 
console.log('value of datetime', valueOfDT);
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>

1

Das Objekt Date akzeptiert einen YYYY/MM/DD-String wie er ist. Von dort können Sie .getTime() verwenden, um einen Zeitstempel zu erhalten:

var startDate='2017/12/28'; 
var dateStamp = new Date(startDate); // e.g. "Thu Dec 28 2017 00:00:00 GMT-0600 (Central Standard Time)" 
var timeStamp = dateStamp.getTime(); // e.g. 1514440800000 
2

Wenn Sie verwenden Luxon möchten können Sie:

var startDate = '2017/12/28'; 
 
var DateTime = luxon.DateTime; 
 
// fromISO with regex 
 
console.log(DateTime.fromISO(startDate.replace(/\//g, '-')).valueOf()); 
 
// fromString instead of regex 
 
console.log(DateTime.fromString(startDate, 'yyyy/MM/dd').valueOf());
<script src="https://moment.github.io/luxon/global/luxon.min.js"></script>

Wenn Sie momentjs (Luxon der "große Bruder") verwenden möchten, können Sie einfach moment(String, String):

var startDate = '2017/12/28'; 
 
console.log(moment(startDate, 'YYYY/MM/DD').valueOf());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.js"></script>

standardmäßig sowohl luxon und Moment Parse String als Ortszeit.


Sie auch Vanille JavaScript verwenden können, finden Date:

  • new Date(year, month, day) (Das Argument Monat ist 0-basiert)
  • new Date(dateString) (IS0 8601 konformes Format, zB 2017-12- 28.Nicht unterstützte Firefox < = 3 und IE < = 8)

var startDate = '2017/12/28'; 
 
var arr = startDate.split('/'); 
 
console.log(new Date(arr[0], arr[1]-1, arr[2]).valueOf()); 
 
console.log(new Date(startDate.replace(/\//g, '-')).valueOf());

Bitte beachten Sie, dass:

Hinweis: Parsen von Datumszeichenfolgen mit dem Date Konstruktor (und Date.parse, sie sind gleichwertig) wird dringend von Browserunterschieden und Incon abgeraten Sisistenzen. Die Unterstützung für RFC 2822-Formatzeichenfolgen erfolgt nur nach Vereinbarung. Die Unterstützung für ISO 8601-Formate unterscheidet sich in diesem Datum - nur Strings (z. B. "1970-01-01") werden als UTC behandelt, nicht lokal.

Verwandte Themen