@Christoph Упоминания используя регулярное выражение для решения этой проблемы. Вот что я использую:
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])
);
Ни в коем случае не умный, просто настроить регулярное выражение и new Date(blah)
в соответствии с вашими потребностями.
Edit: Может быть немного более понятным в использовании ES6 деструктурирующий:
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);
Но во всей честности в эти дни я хватаюсь за что-то вроде Moment
BTW точки и черточки могут не в качестве разделителей, косые все в порядке, так что (в пределах моих тестов) Javascript примет «2011/08/22 10:30:00 «но еще нет (несмотря на ISO 8601)« 2011-09-02 15:58:40 », который, как утверждается, поддерживается в Javascript 1.8.5 on. –
Функция Date.parse анализирует строку даты, которая находится в формате «mm/dd/yyyy». Преобразуйте строку в формат «mm/dd/yyyy» перед применением Parse. –
Почему бы не указать дату в нужном формате? Я делаю это как новую дату ('2012 11 25 18:00:00'); и это работает! – foxybagga