Javascript-Äquivalent zu PHPs strtotime ()?


80

In PHP können Sie eine englische Text-Datums- / Uhrzeitbeschreibung einfach in ein korrektes Datum mit konvertieren strtotime().

Gibt es etwas Ähnliches in Javascript?


Zum Parsen aus dem Format dd.mm.yyyy
Valentin Despa

Antworten:


50

Ich habe diesen Artikel gefunden und das Tutorial ausprobiert. Grundsätzlich können Sie den Datumskonstruktor verwenden, um ein Datum zu analysieren, und dann schreiben, um die Sekunden aus der getTime()Methode abzurufen

var d=new Date("October 13, 1975 11:13:00");
document.write(d.getTime() + " milliseconds since 1970/01/01");

Funktioniert das?


Es scheint, dass ich es nicht arbeite, das Datum ist im dmY-Format formatiert.
Valentin Despa

30
-1. Dies gilt nur für RFC 822- oder ISO 8601-formatierte Daten, strtotime()unterstützt jedoch viele andere Formate.
Ja͢ck

1
Dies kann den Anwendungsfall des OP erfüllen, ist jedoch eine technisch falsche, ungültige Antwort auf die Frage. Siehe (und bitte positiv bewerten) die Antwort von Westy92.
Nate Abele

65

Ja ist es. Und es wird in allen gängigen Browsern unterstützt:

var ts = Date.parse("date string");

Der einzige Unterschied besteht darin, dass diese Funktion Millisekunden anstelle von Sekunden zurückgibt. Sie müssen das Ergebnis also durch 1000 teilen.

Überprüfen Sie, welche gültigen Formate JavaScript analysieren kann.


29
Nee; Dies funktioniert ganz anders als PHP Strtotime, keines der Beispiele der PHP-Dokumentation funktioniert, kein einzigesstrtotime("now"); strtotime("10 September 2000"); strtotime("+1 day"); strtotime("+1 week"); strtotime("+1 week 2 days 4 hours 2 seconds"); strtotime("next Thursday"); strtotime("last Monday");
Ivan Castellanos

1
Danke @Arnaldo. Das funktioniert bei mir. Ihre Antwort ist akzeptabler als die von "Djechelon"
Adi

Dies sollte funktionieren, ist aber unzuverlässig. Date.parse ('2020-06-06') sollte denselben Zeitstempel wie Date.parse ('6. Juni 2020') zurückgeben, dies ist jedoch nicht der Fall. (1591401600000 vs 1591423200000)
Vincent

35

Schauen Sie sich diese Implementierung von PHPs strtotime () in JavaScript an!

Ich fand, dass es für alles, was ich darauf warf, identisch mit PHP funktioniert.

Update: Diese Funktion gemäß Version 1.0.2 kann diesen Fall nicht behandeln: '2007:07:20 20:52:45' (Beachten Sie das :Trennzeichen für Jahr und Monat)

Update 2018:

Dies ist jetzt als npmModul verfügbar ! Einfach npm install locutusund dann in Ihrer Quelle:

var strtotime = require('locutus/php/datetime/strtotime');

3
Normalerweise mag ich keine Antworten, die nur Links zu Bibliotheken sind, aber in diesem Fall, da JavaScript nicht annähernd die verrückten Fälle als strtotime behandelt, ist dies eine fantastische Antwort. Vielen Dank!
Fusty

Die neueste Version von Locutus (7. September 2018 zu diesem Zeitpunkt) behandelt keine Zeichenfolgen wie "gestern 19:00".
Nicolas

4

Ich bin neidisch auf die strtotime () in PHP, aber ich mache meine in Javascript mit Moment. Nicht so süß wie das von PHP, aber macht den Trick auch ordentlich.

// first day of the month
var firstDayThisMonth = moment(firstDayThisMonth).startOf('month').toDate();

Gehen Sie mit dem subtract()und add()mit dem endOf()und hin und her startOf():

// last day of previous month
var yesterMonthLastDay = moment(yesterMonthLastDay).subtract(1,'months').endOf('month').toDate();

0

Die Browserunterstützung für das Parsen von Zeichenfolgen ist inkonsistent . Da es keine Spezifikation gibt, welche Formate unterstützt werden sollen, funktioniert das, was in einigen Browsern funktioniert, in anderen Browsern nicht.

Probieren Sie Moment.js aus - es bietet browserübergreifende Funktionen zum Parsen von Daten :

var timestamp = moment("2013-02-08 09:30:26.123");
console.log(timestamp.milliseconds()); // return timestamp in milliseconds
console.log(timestamp.second()); // return timestamp in seconds

Dies beantwortet die Frage nicht vollständig (und hat eine negative Bewertung). Gibt es eine Möglichkeit, das Kopfgeld zu widerrufen?
Westy92

0

Es gibt nur wenige Module, die ein ähnliches Verhalten bieten, jedoch nicht genau wie die Strtotime von PHP. Unter den wenigen Alternativen fand ich, dass Date-Util die besten Ergebnisse liefert.


0

var strdate = new Date('Tue Feb 07 2017 12:51:48 GMT+0200 (Türkiye Standart Saati)');
var date = moment(strdate).format('DD.MM.YYYY');
$("#result").text(date); //07.02.2017
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>

<div id="result"></div>


Verfallswarnung: Der angegebene Wert hat kein anerkanntes ISO-Format. Moment, in dem die Konstruktion auf js zurückfälltDate() - sooo… genau wie new Date(strdate)wirklich…
täuschen

0

Vielleicht können Sie eine Beispielfunktion nutzen wie:

function strtotime(date, addTime){
  let generatedTime=date.getTime();
  if(addTime.seconds) generatedTime+=1000*addTime.seconds; //check for additional seconds 
  if(addTime.minutes) generatedTime+=1000*60*addTime.minutes;//check for additional minutes 
  if(addTime.hours) generatedTime+=1000*60*60*addTime.hours;//check for additional hours 
  return new Date(generatedTime);
}

let futureDate = strtotime(new Date(), {
    hours: 1, //Adding one hour
    minutes: 45 //Adding fourty five minutes
  });
document.body.innerHTML = futureDate;

`

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.