Добавление 1 или 2 дней в строку даты - PullRequest
4 голосов
/ 10 августа 2011

У меня есть строка, которая может быть date = "10/08/2011"; Стиль английского времени.

Это простая строка, поэтому мне нужно иметь возможность добавить к ней 1 или 2 дня.

Я пробовал несколько вещей, но не могу понять, как обычно я парень PHP, а не JavaScript.

Любая помощь очень ценится.

Спасибо

Lee

UPDATE

Почему это кажется таким сложным, я застрял на этом уже час ..... Я хочу дать коду простую строку, которая мм / дд / гггг - 10/08/2011 и я хочу вернуть что-то вроде 11/08/2011

Почему так сложно ?? Вот почему я ненавижу JavaScript и предпочитаю PHP: - (

Ответы [ 6 ]

14 голосов
/ 10 августа 2011

Это не так уж и сложно:

//convert string to date
var dattmp = "10/08/2011".split('/').reverse().join('/');
var nwdate =  new Date(dattmp);

// to add 1 day use:
nwdate.setDate(nwdate.getDate()+1);

//to retrieve the new date use
[nwdate.getDate(),nwdate.getMonth()+1,nwdate.getFullYear()].join('/');

//all in one:
function dateAddDays( /*string dd/mm/yyyy*/ datstr, /*int*/ ndays){
  var dattmp = datstr.split('/').reverse().join('/');
  var nwdate =  new Date(dattmp);
  nwdate.setDate(nwdate.getDate()+ndays || 1);
  return [ zeroPad(nwdate.getDate(), 10)
          ,zeroPad(nwdate.getMonth()+1, 10)
          ,nwdate.getFullYear() ].join('/');
}

//function to add zero to date/month < 10
function zeroPad(nr, base){
  var len = (String(base).length - String(nr).length) + 1;
  return len > 0? new Array(len).join('0') + nr : nr;
}

//examples
console.log(dateAddDays("10/08/2011"));     //=> 11/08/2011
console.log(dateAddDays("10/08/2011", -5)); //=> 05/08/2011

, если вы действительно хотите, чтобы все было просто - без использования объекта Date:

var datePlus1 = '10/08/2011'.split('/');
datePlus1[0] = Number(datePlus1[0])+1;
console.log(datePlus1.join('/')); //=> 11/08/2011

Вот небольшая дата-времяобработка объекта, который может быть полезен.

9 голосов
/ 10 августа 2011

Чтобы добавить 2 дня:

var theDate = new Date("10/28/2011");
theDate.setDate(theDate.getDate()+2);
0 голосов
/ 17 марта 2018

Я попробовал это и получил результат.

var dat = new Date('2018-03-16');

//use toISOString() to get the string value 2018-03-16T16:38:00.000Z
//substring(0,10) gets 2018-03-16
//reverse to gets 16-03-2018
var ret = dat.toISOString().substring(0, 10).split('-').reverse()

//rearranging to whatever format you want
var t = ret[0];
ret[0] = ret[1];
ret[1] = t;

//result
console.log(ret.join('/'))
0 голосов
/ 10 августа 2011

Вы должны принудительно интерпретировать строку как дата-месяц-год или или месяц-дата-год, иначе она будет зависеть от настроек пользователя.

Вы можете собрать дату из строки, чтобы обеспечить формат даты-месяца:

Date.fromDM=function(string){
    var A= string.match(/([1-9]\d*)/g);
    if(A.length!== 3) throw 'bad date'; 
    return new Date(A[2]*1, A[1]-1, A[0]*1);
}
Date.fromMD=function(string){
    var A= string.match(/([1-9]\d*)/g);
    if(A.length!== 3) throw 'bad date'; 
    return new Date(A[2]*1, A[0]-1, A[1]*1);
}



/*  Date.fromDM('10,08,2011')
return value: (Date)
Wed Aug 10 2011 00:00:00 GMT-0400 (Eastern Daylight Time)
*/

/*Date.fromMD('10,08,2011')
return value: (Date)
Sat Oct 08 2011 00:00:00 GMT-0400 (Eastern Daylight Time)
*/
0 голосов
/ 10 августа 2011

Попробуйте это

var date =  new Date("10/08/2011");

date = new Date(date.setDate(date.getDate()+1));//1 represents 1 day to add so you specify as per your need

var dateStr = date.getDay() + '/' + (date.getMonth() + 1) + '/' + date.getUTCFullYear();
0 голосов
/ 10 августа 2011

Вам нужно будет преобразовать строку в объект даты.При этом вы можете вызывать .getDate () и setDate () - функции для изменения даты.

Но для этого дата должна быть в одном из следующих форматов:

  1. ММ / дд / гггг
  2. гггг / мм / дд
  3. ММ-дд-гггг
  4. ММММ дд, гггг
  5. МММ дд, гггг

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

Для европейских датВы можете изменить строку в правильный формат примерно так:

var date = "10/08/2011";
var eurDate = date.substr(3,2) + "/" + date.substr(0,2) + "/" + date.substr(6);

Ссылки, которые могут помочь вам в этом:

http://programming.top54u.com/post/Javascript-Convert-String-to-Date.aspx

http://www.adp -gmbh.ch / web / js / date / add_days.html

edit:

JSFiddle с примером: http://jsfiddle.net/4W8yM/11/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...