Добавление одного дня в Javascript date + уникальное форматирование?

Я унаследовал проект для компании, над которой я работаю. Их даты записываются в следующем формате:

18 марта 2011 года будет указан как "18 марта 2011 года".

31 апреля 2010 года будет указан как "31 апреля 2010 года".

Как я могу использовать Javascript, чтобы добавить один день к дате, отформатированной выше, а затем переконвертировать ее обратно в тот же формат?

Я хочу создать функцию, которая добавляет один день в "18 марта 2011" и возвращает "19 марта 2011 года". Или добавляет 1 день к "30 июня 2011 года" и возвращает "1 июля 2011 года".

Может ли кто-нибудь помочь мне?

Ответ 1

Прежде всего, нет 31-го апреля;)

В актуальную проблему объект даты может понять текущий формат при передаче в качестве аргумента.

var dateString = '30 Apr 2010'; // date string
var actualDate = new Date(dateString); // convert to actual date
var newDate = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()+1); // create new increased date

// now extract the bits we want to crete the text version of the new date..
var newDateString = ('0'+newDate.getDate()).substr(-2) + ' ' + newDate.toDateString().substr(4,3) + ' ' + newDate.getFullYear();

alert(newDateString);

demo at http://jsfiddle.net/gaby/jGwYY/1/


То же извлечение с использованием (лучше поддерживается) slice вместо substr

// now extract the bits we want to crete the text version of the new date..
var newDateString = ('0'+newDate.getDate()).slice(-2) + ' ' + newDate.toDateString().slice(4,7) + ' ' + newDate.getFullYear();

Демо на http://jsfiddle.net/jGwYY/259/

Ответ 2

Вы хотите преобразовать строку даты в объект Date, добавить один день к объекту и затем преобразовать обратно. Пожалуйста, ознакомьтесь с документами API для Date в качестве отправной точки.

Ответ 3

Большинство (всех?) браузеров смогут анализировать эту строку даты с помощью простого

var parsedDate = new Date(dateString);

Как только у вас есть объект Date, вы можете добавить день и вывести форматированную строку даты, используя что-то вроде underscore.date.

Если вы обнаружите, что некоторые браузеры не могут разобрать этот формат даты, вы можете написать довольно простое регулярное выражение, которое вытащит строку даты в ее составные части, а затем создаст экземпляр Date вручную.

Также я бы настоятельно рекомендовал разбор синтаксиса в отдельной функции и попытаться сохранить даты в представлении даты как можно больше. Разберите строку в дату, как только сможете, и отформатируйте ее обратно в строку как можно позже.