Odpowiednik JavaScript dla strtotime () php?


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?


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.


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');

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();

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

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.


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>


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;

`

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.