Wie generiert man Nodejs im Zeitstempel-Unix-Epochenformat?

Lesezeit: 5 Minuten

Benutzer-Avatar
Benutzer3846091

Ich versuche, Daten an den Graphit-Carbon-Cache-Prozess auf Port 2003 zu senden

Ubuntu-Terminal:

echo "test.average 4 `date +%s`" | nc -q0 127.0.0.1 2003

Node.js:

var socket = net.createConnection(2003, "127.0.0.1", function() {
    socket.write("test.average "+assigned_tot+"\n");
    socket.end();
});

Es funktioniert gut, wenn ich Daten mit dem Terminalfensterbefehl auf meinem Ubuntu sende. Ich bin mir jedoch nicht sicher, wie ich das Zeitstempel-Unix-Epochenformat von nodejs senden soll?

Grpahite versteht Metriken in diesem Format metric_path value timestamp\n

  • +new Date() == das Unix-Datum

    – dandavis

    11. August 2014 um 19:04 Uhr

  • @dandavis Eigentlich ist das nur das Datum. Sie müssen anrufen getTime() Millisekunden zu bekommen.

    – Tadman

    11. August 2014 um 19:08 Uhr

  • @tadman: nein, das “+” zwingt das Datum in seinen valueOf () -Wert, der eine Zahl ist, die die Anzahl der ms seit dem Beginn von 1970 darstellt. Kurz gesagt, Sie brauchen nie getTime()

    – dandavis

    11. August 2014 um 19:10 Uhr


  • Das ist eine interessante Optimierung. Dieser Wert ist immer noch Millisekunden, also müssen Sie durch 1000 teilen, um Sekunden zu erhalten.

    – Tadman

    11. August 2014 um 19:13 Uhr


Benutzer-Avatar
Tadman

Das native JavaScript Date System arbeitet in Millisekunden im Gegensatz zu Sekunden, aber ansonsten ist es die gleiche “Epochenzeit” wie in UNIX.

Sie können die Sekundenbruchteile abrunden und die UNIX-Epoche erhalten, indem Sie Folgendes tun:

Math.floor(+new Date() / 1000)

Aktualisieren: Wie Guillermo betont, ist eine alternative Syntax möglicherweise besser lesbar:

Math.floor(new Date().getTime() / 1000)

Das + Im ersten Beispiel handelt es sich um eine JavaScript-Eigenart, die die Auswertung als Zahl erzwingt, was den gleichen Effekt der Umwandlung in Millisekunden hat. Die zweite Version tut dies ausdrücklich.

  • dasselbe wie ~~ (neues Datum/1000) oder Math.floor(neues Datum/1000)

    – dandavis

    11. August 2014 um 19:11 Uhr


  • @dandavis Entsprechend bearbeitet. Danke für den Hinweis dort. Ich habe verwendet floor Hier ist es sicher ein ganzzahliger Wert, weil traditionell time_t Zeiten haben keine Dezimalstellen.

    – Tadman

    11. August 2014 um 19:14 Uhr


  • Ein Aha-Moment ist die Erkenntnis, dass Daten nur einige Methoden für Menschen sind, die an eine Zahl geheftet werden …

    – dandavis

    11. August 2014 um 19:18 Uhr

  • Typoskript wird sich darüber beschweren, da das Datum auch für Date.parse(new Date()) / 1000 usw. ein anderer Typ als eine Zahl ist, betrachten Sie: Math.floor(new Date().getTime() / 1000) OR Math.floor (+neues Datum() / 1000)

    – Edelwasser

    1. September 2020 um 17:04 Uhr

  • Ich stimme für diese Antwort, weil sie nützlich ist, aber ich muss sagen, dass ich das leichter zu lesende new Date().getTime() dem +newDate() vorziehe

    – Guillermo F. ​​López

    12. Oktober 2020 um 23:17 Uhr


Wenn Sie können, empfehle ich die Verwendung moment.js. Um die Anzahl der Millisekunden seit der UNIX-Epoche zu erhalten, tun Sie es

moment().valueOf()

Um die Anzahl der Sekunden seit der UNIX-Epoche zu erhalten, tun

moment().unix()

Sie können Zeiten auch so umwandeln:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()

Ich mache das die ganze Zeit.

Installieren moment.js auf Knoten,

npm install moment

und es zu benutzen

var moment = require('moment');
moment().valueOf();

Ref

  • Gibt es besondere Vorteile bei der Verwendung moment.js über sowas Math.floor(new Date() / 1000)?

    – Alex

    29. Oktober 2015 um 1:11 Uhr

  • @Alex – Für mich bevorzuge ich moment.js‘s prägnante Syntax und umfassendere Funktionalität. Sie können Dinge tun wie moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').add(3, 'days')

    – Voller Stapel

    30. Oktober 2015 um 2:41 Uhr

Hilfsmethoden, die es vereinfachen, kopieren/fügen Sie Folgendes über Ihrem JS ein:

Date.prototype.toUnixTime = function() { return this.getTime()/1000|0 };
Date.time = function() { return new Date().toUnixTime(); }

Jetzt können Sie es verwenden, wo immer Sie wollen, durch einfache Anrufe:

// Get the current unix time: 
console.log(Date.time())

// Parse a date and get it as Unix time
console.log(new Date('Mon, 25 Dec 2010 13:30:00 GMT').toUnixTime())

Demo:

     
    Date.prototype.toUnixTime = function() { return this.getTime()/1000|0 };
    Date.time = function() { return new Date().toUnixTime(); }

    // Get the current unix time: 
    console.log("Current Time: " + Date.time())

    // Parse a date and get it as Unix time
    console.log("Custom Time (Mon, 25 Dec 2010 13:30:00 GMT): " + new Date('Mon, 25 Dec 2010 13:30:00 GMT').toUnixTime())

  • Sie sollten es vermeiden, die Prototypen von Objekten zu modifizieren, die Sie nicht besitzen

    – James Monger

    4. Dezember 2018 um 12:06 Uhr

In Maschinenschrift einfach ausführen Math.floor(new Date().getTime() / 1000)

> Math.floor(new Date().getTime() / 1000)
1581040613

Ich verwende derzeit Node 13.7.0

Nach ECMAScript5 können Sie verwenden:

Math.floor(Date.now() / 1000);

der einen Epochenzeitstempel in Sekunden generiert.

Das AWS-SDK enthält Hilfsfunktionen zum Konvertieren des Amazon-Datumsformats.

Beispielsweise gibt es in einem Rückruf von einem S3-Get-Objekt eine Eigenschaft „LastModified“ im Amazon-Datumsformat. (Es scheint, dass sie nichts anderes tun, als die Standard-Datumsklasse für ihre Datumseigenschaften wie die Eigenschaft „LastModified“ des S3-Objekts zu exportieren.) Dieses Format enthält einige Dienstprogramme für verschiedene integrierte Formate (leider keine für die Unix-Epoche):

let awsTime = response.LastModified
console.log("Time Formats",{
    "String"           : awsTime.toString(),
    "JSON"             : awsTime.toJSON(),
    "UTCString"        : awsTime.toUTCString(),
    "TimeString"       : awsTime.toTimeString(),
    "DateString"       : awsTime.toDateString(),
    "ISOString"        : awsTime.toISOString(),
    "LocaleTimeString" : awsTime.toLocaleTimeString(),
    "LocaleDateString" : awsTime.toLocaleDateString(),
    "LocaleString"     : awsTime.toLocaleString()
})
/*
Time Formats {
  String: 'Fri Sep 27 2019 16:54:31 GMT-0400 (EDT)',
  JSON: '2019-09-27T20:54:31.000Z',
  UTCString: 'Fri, 27 Sep 2019 20:54:31 GMT',
  TimeString: '16:54:31 GMT-0400 (EDT)',
  DateString: 'Fri Sep 27 2019',
  ISOString: '2019-09-27T20:54:31.000Z',
  LocaleTimeString: '16:54:31',
  LocaleDateString: '2019-9-27',
  LocaleString: '2019-9-27 16:54:31'
}
*/

Die AWS utils-Funktion enthält jedoch ein „date“-Modul mit anderen Funktionen, einschließlich einer unixTimestamp-Methode:

let awsTime = response.LastModified
let unixEpoch = Math.floor(AWS.util.date.unixTimestamp(awsTime))

Hinweis: Diese Methode gibt standardmäßig einen Gleitkommawert zurück. Also die Math.floor()

Funktionscode aus aws-sdk.js (neueste):

/**
 * @return [Integer] the UNIX timestamp value for the current time
 */
 unixTimestamp: function unixTimestamp(date) {
     if (date === undefined) { date = util.date.getDate(); }
     return date.getTime() / 1000;
 }

Es gibt auch Methoden für rfc822 und iso8601

Verwenden von momentjs:

Die folgenden zwei Variablen haben denselben Wert:-

console.log(moment().format('X'))
console.log(moment.utc().format('X'))

Verwenden von Date() eingebaut:

console.log(new Date().getTime())   // including fractional seconds
console.log(Math.floor(new Date().getTime()/1000))    // up to seconds

1175490cookie-checkWie generiert man Nodejs im Zeitstempel-Unix-Epochenformat?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy