Hoe krijg je een tijdstempel in JavaScript?

Iets vergelijkbaar met Unix’ tijdstempel, dat is een enkel getal dat de huidige tijd en datum vertegenwoordigt. Ofwel als een getal of een tekenreeks.


Antwoord 1, autoriteit 100%

Kort & Snazzy:

+ new Date()

Een unaire operator zoals plusactiveert de methode valueOfin het Date-object en retourneert het tijdstempel (zonder enige wijziging).

p>

Details:

In bijna alle huidige browsers kun je Date.now()om de UTC-tijdstempel in millisecondente krijgen; een opmerkelijke uitzondering hierop is IE8 en eerder (zie compatibiliteitstabel) .

Je kunt hier echter gemakkelijk een shim voor maken:

if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}

Om de tijdstempel in secondente krijgen, kun je het volgende gebruiken:

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

U kunt ook het volgende gebruiken:

Date.now() / 1000 | 0

Dat zou iets sneller moeten zijn, maar ook minder leesbaar.
(ook zie dit antwoordof ditmet verdere uitleg voor bitsgewijze operators).

Ik zou aanraden om Date.now()te gebruiken (met compatibiliteitsschijf). Het is iets beter omdat het korter is & maakt geen nieuw Dateobject aan. Als u echter geen shim & maximale compatibiliteit, kunt u de “oude” methode gebruiken om de tijdstempel in millisecondente krijgen:

new Date().getTime()

Wat je dan als volgt naar seconden kunt converteren:

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

En je kunt ook de valueOfmethode gebruiken die we hierboven hebben laten zien:

new Date().valueOf()

Tijdstempel in milliseconden

var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();
console.log(timeStampInMs, Date.now());

Antwoord 2, autoriteit 11%

Ik vind dit leuk, omdat het klein is:

+new Date

Ik vind dit ook leuk, omdat het net zo kort is en compatibel is met moderne browsers, en meer dan 500 mensen hebben gestemd dat het beter is:

Date.now()

Antwoord 3, autoriteit 6%

JavaScript werkt met het aantal milliseconden sinds het tijdperk, terwijl de meeste andere talen met de seconden werken. Je zou met milliseconden kunnen werken, maar zodra je een waarde doorgeeft om PHP te zeggen, zullen de native PHP-functies waarschijnlijk mislukken. Dus om zeker te zijn gebruik ik altijd de seconden, niet de milliseconden.

Dit geeft je een Unix-tijdstempel (in seconden):

var unix = Math.round(+new Date()/1000);

Dit geeft je de milliseconden sinds het tijdperk (niet Unix-tijdstempel):

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

Antwoord 4, autoriteit 3%

var time = Date.now || function() {
  return +new Date;
};
time();

Antwoord 5, autoriteit 3%

Ik bied meerdere oplossingen met beschrijvingen in dit antwoord. Stel gerust vragen als er iets onduidelijk is


Snelle en vuile oplossing:

Date.now() /1000 |0

Waarschuwing: het kanbreken in 2038 en negatieve getallen retourneren als je de |0magie uitvoert. Gebruik in plaats daarvan Math.floor()tegen die tijd

Math.floor()oplossing:

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

Een nerdy alternatief door Derek 朕會功夫uit de reacties onder dit antwoord:

new Date/1e3|0

Vul invullen om Date.now()werkend te krijgen:

Om het werkend te krijgen in IE kun je dit doen (Polyfill van MDN):

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

Als het jaar/dag van de week/zomertijd u niet interesseert, moet u dit onthouden voor datums na 2038:

Bitgewijze bewerkingen veroorzaken het gebruik van 32-bits gehele getallen in plaats van 64-bits drijvende komma.

U moet het correct gebruiken als:

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

Als je alleen de relatieve tijd wilt weten vanaf het moment dat de code voor het eerst werd doorlopen, zou je zoiets als dit kunnen gebruiken:

const relativeTime = (() => {
    const start = Date.now();
    return () => Date.now() - start;
})();

Als je jQuery gebruikt, kun je $.now()gebruiken zoals beschreven in jQuery’s Docswaardoor de polyfill overbodig wordt omdat $.now()intern hetzelfde doet: (new Date).getTime()

Als je gewoon tevreden bent met de versie van jQuery, overweeg dan om ditantwoord te geven, aangezien ik het niet heb gevonden het zelf.


Nu een kleine uitleg van wat |0doet:

Door |op te geven, vertelt u de tolk een binaire OF-bewerking uit te voeren.
Bitbewerkingen vereisen absolute getallen die het decimale resultaat van Date.now() / 1000in een geheel getal veranderen.

Tijdens die conversie worden decimalen verwijderd, wat resulteert in een resultaat dat vergelijkbaar is met wat het gebruik van Math.floor()zou opleveren.

Wees echter gewaarschuwd:het zal een 64 bit double converteren naar een 32 bit integer.
Dit zal leiden tot informatieverlies bij het omgaan met grote aantallen.
Tijdstempels worden verbroken na 2038 vanwege 32-bits integeroverloop, tenzij Javascript in de strikte modus naar 64-bits integers wordt verplaatst.


Voor meer informatie over Date.nowvolg deze link: Date.now()@ MDN


Antwoord 6, autoriteit 2%

var timestamp = Number(new Date()); // current time as number

Antwoord 7

jQuerybiedt zijn eigen methodeom de tijdstempel te krijgen:

var timestamp = $.now();

(bovendien implementeert het gewoon (new Date).getTime()expressie)

REF:http://api.jquery.com/jQuery. nu/


Antwoord 8

Als u naast de andere opties een ISO-datumindeling wilt, kunt u deze direct verkrijgen

console.log(new Date().toISOString());

Antwoord 9

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch

Antwoord 10

Datum, een eigen objectin JavaScript is de manier waarop we alle gegevens over tijd verkrijgen.

Wees voorzichtig in JavaScript, de tijdstempel is afhankelijk van de clientcomputerset, dus het is geen 100% nauwkeurige tijdstempel. Om het beste resultaat te krijgen, moet u de tijdstempel van de server-sidekrijgen.

Hoe dan ook, mijn voorkeur gaat uit naar het gebruik van vanille. Dit is een gebruikelijke manier om het in JavaScript te doen:

Date.now(); //return 1495255666921

In MDN wordt het als volgt vermeld:

De methode Date.now() retourneert het aantal milliseconden dat is verstreken sinds
1 januari 1970 00:00:00 UTC.
Omdat now() een statische methode van Date is, gebruik je het altijd als Date.now().

Als u een versie onder ES5 gebruikt, werkt Date.now();niet en moet u het volgende gebruiken:

new Date().getTime();

Antwoord 11

Om op te tellen, hier is een functie om een tijdstempelreeks in Javascript te retourneren.
Voorbeeld: 15:06:38 uur

function displayTime() {
    var str = "";
    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    var seconds = currentTime.getSeconds()
    if (minutes < 10) {
        minutes = "0" + minutes
    }
    if (seconds < 10) {
        seconds = "0" + seconds
    }
    str += hours + ":" + minutes + ":" + seconds + " ";
    if(hours > 11){
        str += "PM"
    } else {
        str += "AM"
    }
    return str;
}

Antwoord 12

Prestaties

Vandaag – 2020.04.23 voer ik tests uit voor gekozen oplossingen. Ik heb getest op MacOs High Sierra 10.13.6 op Chrome 81.0, Safari 13.1, Firefox 75.0

Conclusies

  • Oplossing Date.now()(E) is de snelste in Chrome en Safari en de tweede snel in Firefox en dit is waarschijnlijk de beste keuze voor een snelle oplossing voor meerdere browsers
  • Oplossing performance.now()(G), wat verrassend is, is meer dan 100x sneller dan andere oplossingen in Firefox, maar het langzaamst in Chrome
  • Oplossingen C,D,F zijn vrij traag in alle browsers

Details

Resultaten voor chrome

U kunt HIER

een test uitvoeren op uw machine

De code die in tests wordt gebruikt, wordt weergegeven in het onderstaande fragment


Antwoord 13

Eentje die ik nog niet heb gezien

Math.floor(Date.now() / 1000); // current time in seconds

Een andere die ik nog niet heb gezien is

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();

Antwoord 14

De Date.getTime()methode kan worden gebruikt met een kleine aanpassing:

De waarde die wordt geretourneerd door de methode getTime is het aantal milliseconden
sinds 1 januari 1970 00:00:00 UTC.

Verdeel het resultaat door 1000 om de Unix-tijdstempel te krijgen, floorindien nodig:

(new Date).getTime() / 1000

De Date.valueOf()methode is functioneel equivalent aan Date.getTime(), wat het mogelijk maakt om rekenkundige operatoren te gebruiken op date object om identieke resultaten. Naar mijn mening beïnvloedt deze benadering de leesbaarheid.


Antwoord 15

De code Math.floor(new Date().getTime() / 1000)kan worden ingekort tot new Date / 1E3 | 0.

Overweeg om getTime()aanroep en gebruik | 0als vervanging voor Math.floor()functie.
Het is ook goed om te onthouden dat 1E3een kortere equivalent is voor 1000(hoofdletter E heeft de voorkeur boven kleine letters om 1E3als constante aan te geven).

Als resultaat krijg je het volgende:

var ts = new Date / 1E3 | 0;
console.log(ts);

Antwoord 16

Voor een tijdstempel met een resolutie van microseconden zijn er performance.now:

function time() { 
  return performance.now() + performance.timing.navigationStart;
}

Dit kan bijvoorbeeld 1436140826653.139opleveren, terwijl Date.nowalleen 1436140826653geeft.


Antwoord 17

Ik raad het gebruik van moment.jsten zeerste aan. Om het aantal milliseconden sinds het UNIX-tijdperk te krijgen, doe je

moment().valueOf()

Als u het aantal seconden sinds het UNIX-tijdperk wilt zien, doet u

moment().unix()

Je kunt tijden ook als volgt omrekenen:

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

Dat doe ik altijd. Geen woordspeling bedoeld.

Om moment.jsin de browser te gebruiken:

<script src="moment.js"></script>
<script>
    moment().valueOf();
</script>

Voor meer details, inclusief andere manieren om MomentJS te installeren en te gebruiken, zie hun docs


Antwoord 18

U kunt alleen

. gebruiken

   var timestamp = new Date().getTime();
    console.log(timestamp);

Antwoord 19

Hier is een eenvoudige functie om een tijdstempel te genereren in het formaat: mm/dd/jj uu:mi:ss

function getTimeStamp() {
    var now = new Date();
    return ((now.getMonth() + 1) + '/' +
            (now.getDate()) + '/' +
             now.getFullYear() + " " +
             now.getHours() + ':' +
             ((now.getMinutes() < 10)
                 ? ("0" + now.getMinutes())
                 : (now.getMinutes())) + ':' +
             ((now.getSeconds() < 10)
                 ? ("0" + now.getSeconds())
                 : (now.getSeconds())));
}

Antwoord 20

// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)
// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720
// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087
// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Antwoord 21

Alle browsers die Date.now niet ondersteunen, u kunt dit gebruiken om de huidige datum en tijd op te halen:

currentTime = Date.now() || +new Date()

Antwoord 22

Als het voor logboekdoeleinden is, kunt u ISOString

. gebruiken

new Date().toISOString()

“2019-05-18T20:02:36.694Z”


Antwoord 23

Deze heeft een oplossing: die unixtime-stempel naar tim in js converteert, probeer dit

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();

Antwoord 24

Ik heb een heel coole manier geleerd om een bepaald Date-object naar een Unix-tijdstempel te converteren uit de broncode van JQuery-cookieonlangs.

Hier is een voorbeeld:

var date = new Date();
var timestamp = +date;

Antwoord 25

Als je een eenvoudige manier wilt om een tijdstempel in Node.js te genereren, dan werkt dit goed.

var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

Ons team gebruikt dit om de cache in een localhost-omgeving te breken. De uitvoer is /dist/css/global.css?v=245521377waarbij 245521377het tijdstempel is dat wordt gegenereerd door hrtime().

Hopelijk helpt dit, de bovenstaande methoden kunnen ook werken, maar ik vond dit de eenvoudigste aanpak voor onze behoeften in Node.js.


Antwoord 26

Dit lijkt te werken.

console.log(clock.now);
// returns 1444356078076
console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16
console.log(clock.format(clock.now + clock.add(10, 'minutes'))); 
//returns 10/8/2015 21:08:18
var clock = {
    now:Date.now(),
    add:function (qty, units) {
            switch(units.toLowerCase()) {
                case 'weeks'   :  val = qty * 1000 * 60 * 60 * 24 * 7;  break;
                case 'days'    :  val = qty * 1000 * 60 * 60 * 24;  break;
                case 'hours'   :  val = qty * 1000 * 60 * 60;  break;
                case 'minutes' :  val = qty * 1000 * 60;  break;
                case 'seconds' :  val = qty * 1000;  break;
                default       :  val = undefined;  break;
                }
            return val;
            },
    format:function (timestamp){
            var date = new Date(timestamp);
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var day = date.getDate();
            var hours = date.getHours();
            var minutes = "0" + date.getMinutes();
            var seconds = "0" + date.getSeconds();
            // Will display time in xx/xx/xxxx 00:00:00 format
            return formattedTime = month + '/' + 
                                day + '/' + 
                                year + ' ' + 
                                hours + ':' + 
                                minutes.substr(-2) + 
                                ':' + seconds.substr(-2);
            }
};

Antwoord 27

Voor lodash en underscore Gebruikers, gebruiken _.now.

var timestamp = _.now(); // in milliseconds

Antwoord 28

moment.js kan veel van de pijn abstraceren in het omgaan met JavaScript-data.

Zie: http://momentjs.com/docs/#/displaying/unix -Timestamp /

moment().unix();

Antwoord 29

Vanaf het schrijven is het topantwoord 9 jaar oud, en er is een partij sindsdien veranderd sindsdien – niet in de laatste plaats, we hebben in de buurt van Universal Support voor een niet-hacky-oplossing:

Date.now()

Als u absoluut zeker wilt zijn dat dit niet breken in een aantal oude (pre IE9) browser, kunt u het achter een cheque plaatsen, zoals SO:

const currentTimestamp = (!Date.now ? +new Date() : Date.now());

Hierdoor wordt de milliseconden aangetroffen sinds de tijd van de tijd, natuurlijk, niet seconden.

MDN-documentatie op datum. Nu


ANTWOORD 30

eenvoudiger:

var timeStamp=event.timestamp || new Date().getTime();

Other episodes