Odpowiednik JavaScript dla strtotime () php?

83

W PHP możesz łatwo przekonwertować angielski tekstowy opis daty i godziny na właściwą datę za pomocą strtotime().

Czy jest coś podobnego w Javascript?

VJS
źródło
Aby przeanalizować dane w formacie dd.mm.rrrr, sprawdź stackoverflow.com/questions/1576753/…
Valentin Despa,

Odpowiedzi:

52

Znalazłem ten artykuł i wypróbowałem samouczek. Zasadniczo możesz użyć konstruktora daty do przeanalizowania daty, a następnie napisać, aby uzyskać sekundy z getTime()metody

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

czy to działa?

usr-local-ΕΨΗΕΛΩΝ
źródło
Wygląda na to, że nie działa, data jest sformatowana w formacie dmY.
Valentin Despa,
30
-1. Dotyczy to tylko dat w formacie RFC 822 lub ISO 8601, ale strtotime()obsługuje wiele innych formatów.
Ja͢ck
1
Może się to zdarzyć, aby spełnić przypadek użycia OP, ale jest to technicznie niepoprawna, nieprawidłowa odpowiedź na pytanie. Zobacz (i poproś o głos) odpowiedź Westy92.
Nate Abele
68

Tak to jest. I jest obsługiwany we wszystkich głównych przeglądarkach:

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

Jedyną różnicą jest to, że ta funkcja zwraca milisekundy zamiast sekund, więc musisz podzielić wynik przez 1000.

Sprawdź, jakie prawidłowe formaty mogą analizować JavaScript.

Arnaldo
źródło
29
Nie; to działa zupełnie inaczej niż php strtotime, żaden z przykładów pracy dokumentacji php, ani jedenstrtotime("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
Dzięki @Arnaldo. To działa dla mnie. Twoja odpowiedź jest bardziej akceptowalna niż „Djechelon's”
Adi
To powinno działać, ale jest zawodne. Date.parse ('2020-06-06') powinno zwracać ten sam znacznik czasu co Date.parse ('6 czerwca 2020'), ale tak nie jest. (1591401600000 vs 1591423200000)
Vincent,
35

Sprawdź realizację strtotime (PHP) w JavaScript!

Odkryłem, że działa identycznie jak PHP we wszystkim, co do niego wrzuciłem.

Aktualizacja: ta funkcja w wersji 1.0.2 nie może obsłużyć tego przypadku: '2007:07:20 20:52:45' (Uwaga :separator roku i miesiąca)

Aktualizacja 2018:

Jest to teraz dostępne jako npmmoduł ! Po prostu, npm install locutusa potem w twoim źródle:

var strtotime = require('locutus/php/datetime/strtotime');
Westy92
źródło
3
Zwykle nie lubię odpowiedzi, które są tylko linkami do bibliotek, ale w tym przypadku JavaScript nie obsługuje prawie szalonych przypadków tak jak strtotime, więc jest to fantastyczna odpowiedź. Dziękuję Ci!
Fusty
Najnowsza wersja Locutusa (obecnie 7 września 2018 r.) Nie obsługuje smyczków typu „wczoraj 19:00”.
nicolas
4

Zazdroszczę strtotime () w php, ale swoje robię w javascript za pomocą momentu. Nie tak słodki jak ten z php, ale też robi to zgrabnie.

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

Idź tam iz powrotem, używając subtract()i add()z endOf()i startOf():

// last day of previous month
var yesterMonthLastDay = moment(yesterMonthLastDay).subtract(1,'months').endOf('month').toDate();
KhoPhi
źródło
0

Obsługa przeglądarki w zakresie analizowania ciągów jest niespójna . Ponieważ nie ma specyfikacji, które formaty powinny być obsługiwane, to, co działa w niektórych przeglądarkach, nie będzie działać w innych przeglądarkach.

Wypróbuj Moment.js - zapewnia funkcjonalność dla różnych przeglądarek do analizowania dat :

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
bedrin
źródło
To nie w pełni odpowiada na pytanie (i ma negatywny wynik). Czy istnieje sposób na cofnięcie nagrody?
Westy92,
0

Istnieje kilka modułów, które zapewniają podobne zachowanie, ale nie do końca jak strtotime w PHP. Wśród kilku alternatyw znalazłem data-util daje najlepsze rezultaty.

doc_id
źródło
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>

Nieograniczone isa
źródło
Ostrzeżenie o wycofaniu: podana wartość nie jest w rozpoznawanym formacie ISO. moment konstrukcja wraca do jsDate() - baaaardzo… tak samo jak new Date(strdate)naprawdę…
deceze
0

Może możesz wykorzystać przykładową funkcję, taką jak:

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;

`

Adnane Ar
źródło