alert(new Date('2010-11-29'));
chrome, ff nie ma z tym problemów, ale safari krzyczy „nieprawidłowa data”. Czemu ?
edycja: ok, zgodnie z komentarzami poniżej, użyłem parsowania ciągów i spróbowałem tego:
alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari
edytuj Mar 22 2018 : Wygląda na to, że ludzie wciąż tu lądują - Dzisiaj użyłbym moment
lub date-fns
i skończę z tym. Date-fns jest również bardzo bezbolesny i lekki.
javascript
date
safari
Shrinath
źródło
źródło
Odpowiedzi:
Wzorzec
yyyy-MM-dd
nie jest oficjalnie obsługiwanym formatem dlaDate
konstruktora. Wydaje się, że Firefox to obsługuje, ale nie licz na to, że inne przeglądarki zrobią to samo.Oto kilka obsługiwanych ciągów:
DateJS wydaje się dobrą biblioteką do analizowania niestandardowych formatów dat.
Edycja : właśnie sprawdzono standard ECMA-262 . Cytując z sekcji 15.9.1.15:
Format ciągu daty i godziny
Wygląda więc na to, że RRRR-MM-DD jest zawarty w standardzie, ale z jakiegoś powodu Safari go nie obsługuje.
Aktualizacja : po przejrzeniu dokumentacji datejs i użyciu jej, twój problem powinien zostać rozwiązany za pomocą takiego kodu:
źródło
Dla mnie implementacja nowej biblioteki tylko dlatego, że Safari nie może tego zrobić poprawnie, to za dużo, a wyrażenie regularne to przesada. Oto oneliner :
źródło
Miałem podobny problem.
Date.Parse("DATESTRING")
działał na Chrome (wersja 59.0.3071.115), ale nie na Safari (wersja 10.1.1 (11603.2.5))Safari:
Chrom:
Rozwiązaniem, które zadziałało, było zastąpienie spacji w ciągu dateString przez
"T"
. (przykładdateString.replace(/ /g,"T")
:)Safari:
Chrom:
Zwróć uwagę, że odpowiedź z przeglądarki Safari jest o 8 godzin (28800000 ms) krótsza niż odpowiedź widoczna w przeglądarce Chrome, ponieważ Safari zwróciło odpowiedź w lokalnym TZ (czyli o 8 godzin za czasem UTC)
Aby uzyskać oba czasy w tej samej TZ
Safari:
Chrom:
źródło
new Date(year, month, date, hours, minutes, seconds, milliseconds)
konstruktora. Przeanalizuj datę ciągu do tablicy jego składników, aby użyć tych składników w konstruktorze. @nizantz byłoby wspaniale, gdybyś pomyślał, że taki przykład można dodać do Twojej odpowiedzi.dateString.replace(/ /g,"T")
mnie zadziałała ta magiczna linia kodu. :)Wykorzystuję chwilę, aby rozwiązać problem. Na przykład
źródło
Aby rozwiązanie działało w większości przeglądarek, należy utworzyć obiekt daty w tym formacie
na przykład:
działa dobrze z IE, FF, Chrome i Safari. Nawet starsze wersje.
Centrum deweloperów IE: obiekt daty (JavaScript)
Mozilla Dev Network: Data
źródło
przekonwertuj ciąg na Date fromat (musisz znać strefę czasową serwera)
gdzie +08: 00 = strefa czasowa z serwera
źródło
Miałem ten sam problem, a potem wykorzystałem moment. J. Problem zniknął.
na przykład
źródło
Chociaż możesz mieć nadzieję, że przeglądarki będą obsługiwać ISO 8601 (lub jego podzbiory tylko z datą), tak nie jest. Wszystkie znane mi przeglądarki (przynajmniej w językach amerykańskich / angielskich, których używam) są w stanie przeanalizować okropny
MM/DD/YYYY
format amerykański .Jeśli masz już części daty, możesz zamiast tego spróbować użyć Date.UTC () . Jeśli tego nie zrobisz, ale musisz użyć
YYYY-MM-DD
formatu, sugeruję użycie wyrażenia regularnego do przeanalizowania elementów, które znasz, a następnie przekazania ich doDate.UTC()
.źródło
Użyj poniższego formatu, będzie działać we wszystkich przeglądarkach
// Twój wynik będzie wyglądał następująco: „Wed Mar 23 2016 00:00:00 GMT + 0530 (IST)”
// Zauważ, że będzie to aktualna strefa czasowa w tym przypadku oznaczona przez IST, aby przekonwertować na strefę czasową UTC, którą możesz dołączyć
// Twoje wyniki wyglądają teraz następująco: „Wt, 22 Mar 2016 18:30:00 GMT”
Zauważ, że teraz dateObj pokazuje czas w formacie GMT, zwróć także uwagę, że data i czas zostały odpowiednio zmienione.
Funkcja „toUTCSting” pobiera odpowiedni czas na południku Greenwich. Osiąga się to poprzez ustalenie różnicy czasu między twoją bieżącą strefą czasową a strefą czasową Greenwich Meridian.
W powyższym przypadku czas przed konwersją wynosił 00:00 godzin i minut 23 marca 2016 roku. A po konwersji z GMT + 0530 (IST) godzin na GMT (zasadniczo odejmuje 5,30 godziny od podanego znacznika czasu w tym przypadek) oznacza godzinę 18:30 w dniu 22 marca 2016 roku (dokładnie 5:30 za pierwszym razem).
Ponadto, aby przekonwertować dowolny obiekt daty na znacznik czasu, którego możesz użyć
// wynik będzie wyglądał podobnie do tego „1458671400000”
Dałoby to unikalny znacznik czasu
źródło
Co powiesz na przejęcie
Date
z fix-date ? Brak zależności, min + gzip = 280 Bźródło
Najlepszym sposobem na to jest użycie następującego formatu:
Jest to obsługiwane we wszystkich przeglądarkach i nie powoduje żadnych problemów. Pamiętaj, że miesiące są zapisywane od 0 do 11.
źródło
Ten sam problem, który pojawił się w Safari i został rozwiązany poprzez wstawienie tego na stronie internetowej
Mam nadzieję, że zadziała również w Twojej sprawie
Dzięki
źródło
Jak @nizantz wspomniał wcześniej, używanie Date.parse () nie działało dla mnie w Safari. Po krótkiej analizie dowiedziałem się, że właściwość lastDateModified obiektu File jest przestarzała i nie jest już obsługiwana przez Safari. Użycie właściwości lastModified obiektu File rozwiązało moje problemy. Z pewnością nie podoba mi się, gdy w Internecie zostaną znalezione złe informacje.
Dziękuję wszystkim, którzy przyczynili się do powstania tego postu, który pomógł mi podążać ścieżką, której potrzebowałem, aby poznać mój problem. Gdyby nie te informacje, prawdopodobnie nigdy nie rozwiązałbym problemu z głównym źródłem. Może to pomoże komuś innemu w podobnej sytuacji.
źródło
Mam również ten sam problem w przeglądarce Safari
Oto rozwiązanie:
źródło
Nie jest to najlepsze rozwiązanie, chociaż po prostu wyłapuję błąd i odsyłam aktualną datę. Osobiście czuję, że nie chcę rozwiązywać problemów z Safari, jeśli użytkownicy chcą używać przeglądarki zgodnej ze standardami, muszą żyć z dziwactwami.
Sugerowałbym, aby Twój backend wysyłał daty ISO.
źródło
użyj formatu „dd / mm / rrrr”. Na przykład: - nowa data („02/28/2015”). Działa dobrze we wszystkich przeglądarkach.
źródło