Jak przekonwertować ciąg znaków na obiekt daty i czasu w javascript, określając ciąg formatu?
Szukam czegoś takiego:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Jak przekonwertować ciąg znaków na obiekt daty i czasu w javascript, określając ciąg formatu?
Szukam czegoś takiego:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Odpowiedzi:
Myślę, że to może ci pomóc: http://www.mattkruse.com/javascript/date/
Istnieje getDateFromFormat()
funkcja, którą możesz nieco ulepszyć, aby rozwiązać problem.
Aktualizacja: dostępna jest zaktualizowana wersja próbek dostępna na javascripttoolbox.com
TypeError: Object Date has no method 'getDateFromFormat'
Użyj jeśli twój ciąg jest zgodny z . Jeśli twój format jest niekompatybilny (tak mi się wydaje), musisz sam przeanalizować ciąg (powinno to być łatwe z wyrażeniami regularnymi) i utworzyć nowy obiekt Date z wyraźnymi wartościami dla roku, miesiąca, daty, godziny, minuty i sekundy.new Date(dateString)
Date.parse()
@Christoph Wspomnienia za pomocą wyrażenia regularnego, aby rozwiązać problem. Oto czego używam:
var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString);
var dateObject = new Date(
(+dateArray[1]),
(+dateArray[2])-1, // Careful, month starts at 0!
(+dateArray[3]),
(+dateArray[4]),
(+dateArray[5]),
(+dateArray[6])
);
Nie jest bynajmniej inteligentny, wystarczy skonfigurować regex i new Date(blah)
dopasować go do swoich potrzeb.
Edycja: Może nieco bardziej zrozumiały w ES6 przy użyciu destrukcji:
let dateString = "2010-08-09 01:02:03"
, reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
, [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
, dateObject = new Date(year, month-1, day, hours, minutes, seconds);
Ale szczerze mówiąc, obecnie sięgam po coś takiego jak Moment
/g
flagi tylko po to, lastIndex
aby 0
później ustawić ? Po prostu nie używaj globalnego dopasowania.
/g
była niechlujna kopia / wklej z istniejącego projektu. lastindex
został dodany przez redaktora (aby zwalczyć, jak \g
sądzę?). Teraz je usunę. Dziękuję za zwrócenie na to uwagi.
W JavaScript nie ma żadnych zaawansowanych procedur formatowania daty / godziny.
Będziesz musiał użyć zewnętrznej biblioteki do sformatowania danych wyjściowych, „JavaScript Date Format” z Flagrant Badassery wygląda bardzo obiecująco.
W przypadku konwersji wejściowej poczyniono już kilka sugestii. :)
Sprawdź Moment.js . Jest to nowoczesna i potężna biblioteka, która rekompensuje żałosne funkcje JavaScript (lub ich brak).
Tylko dla zaktualizowanej odpowiedzi tutaj, dobra biblioteka js na http://www.datejs.com/
Datejs to otwarta biblioteka źródeł danych JavaScript do analizowania, formatowania i przetwarzania.
var temp1 = "";
var temp2 = "";
var str1 = fd;
var str2 = td;
var dt1 = str1.substring(0,2);
var dt2 = str2.substring(0,2);
var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);
var yr1 = str1.substring(6,10);
var yr2 = str2.substring(6,10);
temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;
var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);
var date1 = new Date(cfd);
var date2 = new Date(ctd);
if(date1 > date2) {
alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}
Biblioteka zewnętrzna to przesada w analizowaniu jednej lub dwóch dat, więc utworzyłem własną funkcję, korzystając z rozwiązań Oli i Christoph . W Europie Środkowej rzadko używamy czegoś, ale format OP, więc powinno to wystarczyć dla prostych aplikacji używanych tutaj.
function ParseDate(dateString) {
//dd.mm.yyyy, or dd.mm.yy
var dateArr = dateString.split(".");
if (dateArr.length == 1) {
return null; //wrong format
}
//parse time after the year - separated by space
var spacePos = dateArr[2].indexOf(" ");
if(spacePos > 1) {
var timeString = dateArr[2].substr(spacePos + 1);
var timeArr = timeString.split(":");
dateArr[2] = dateArr[2].substr(0, spacePos);
if (timeArr.length == 2) {
//minutes only
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
} else {
//including seconds
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
}
} else {
//gotcha at months - January is at 0, not 1 as one would expect
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
}
}
Date.parse()
jest dość inteligentny, ale nie mogę zagwarantować, że format zostanie poprawnie przeanalizowany.
Jeśli tak się nie stanie, musisz znaleźć coś, co rozwiąże te dwa problemy. Twój przykład jest dość prosty (jest to czysto cyfry), więc odrobina REGEX (a nawet string.split()
- może być szybsza) w połączeniu z niektórymi parseInt()
pozwoli ci szybko umówić się na randkę.
time = "2017-01-18T17:02:09.000+05:30"
t = new Date(time)
hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);
t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec
Żeby dać moje 5 centów.
Mój format daty to dd.mm.rrrr (format brytyjski) i żaden z powyższych przykładów nie działał dla mnie. Wszystkie analizatory analizowały mm jako dzień, a dd jako miesiąc.
Znalazłem tę bibliotekę: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ i zadziałało, ponieważ możesz podać kolejność pól takich jak to:
>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)
Mam nadzieję, że to komuś pomoże.
Moment.js zajmie się tym:
var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;
Możesz do tego użyć biblioteki moment.js. Używam tylko do uzyskania danych wyjściowych zależnych od czasu, ale możesz wybrać rodzaj formatu, który chcesz wybrać.
Odniesienie:
1. biblioteka chwil: https://momentjs.com/
2. funkcje specyficzne dla godziny i daty: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript
convertDate(date) {
var momentDate = moment(date).format('hh : mm A');
return momentDate;
}
i możesz wywołać tę metodę:
this.convertDate('2020-05-01T10:31:18.837Z');
Mam nadzieję, że to pomoże. Ciesz się kodowaniem.
Aby w pełni spełnić ciąg Date.parse, należy przekonwertować ciąg znaków na format dd-mm-RRRR, jak określono w RFC822, jeśli użyjesz parsowania rrrr-mm-dd, możesz popełnić błędy.
//Here pdate is the string date time
var date1=GetDate(pdate);
function GetDate(a){
var dateString = a.substr(6);
var currentTime = new Date(parseInt(dateString ));
var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
var day =("0"+ currentTime.getDate()).slice(-2);
var year = currentTime.getFullYear();
var date = day + "/" + month + "/" + year;
return date;
}