向日期字符串添加 1 或 2 天

新手上路,请多包涵

我有一个字符串,它可能是 date = "10/08/2011"; 英国时间风格。

它是一个普通字符串,所以我需要能够为其添加 1 或 2 天。

我已经尝试了一些东西但无法解决,因为我通常是一个 PHP 人而不是 JavaScript。

任何帮助是极大的赞赏。

谢谢

更新

为什么这看起来这么难,我已经坚持了一个小时了…..我想给代码一个简单的字符串,它是 mm/dd/yyyy - 10/08/2011 我想要返回类似 11/08/2011 的内容

为什么这么难??这就是为什么我讨厌 javascript 而更喜欢 PHP :-(

原文由 Lee 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 540
2 个回答

并不是那么复杂:

 //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

如果你真的想要它简单 - 不使用日期对象:

 console.log( '10/08/2011'
  .split('/')
  .map( (v, i) => i < 1 ? +v + 1 : v)
  .join('/')
);

这是一个将日期(-时间)字符串转换为日期的小函数:

 const log = Logger(document.querySelector(`pre`));
log(
  `<code>str2Date(\`3/15/2013T12:22\`, \`mdy\`)</code>\n  &gt; ${
    str2Date(`3/15/2013T12:22`, `mdy`)}`,
  `<code>str2Date(\`15-2013-03 12:22\`, \`dym\`)\</code>\n  &gt; ${
    str2Date(`15-2013-03 12:22`, `dym`)}`,
  `<code>str2Date(\`15/3/2013\`, \`dmy\`)</code>\n  &gt; ${
    str2Date(`15/3/2013`, `dmy`)}`,
  `<code>str2Date(\`2013/03/15\`)</code>\n  &gt; ${
    str2Date(`2013/03/15`)}` );

function str2Date(dateStr, ymd = `ymd`) {
  ymd = [...ymd].reduce( (acc, v, i) => ({...acc, [v]: i}), {} );
  const dt = dateStr.split(/[ T]/);
  const [d, t] = [ dt[0].split(/[/-]/), dt[1] ];
  return new Date( `${d[ymd.y]}-${d[ymd.m]}-${d[ymd.d]} ${t || ``}` );
}

function Logger(logEl) {
  return (...args) => {
    args.forEach(arg =>
      logEl.appendChild(
        Object.assign(document.createElement(`div`), {
          innerHTML: `${arg}`,
          className: `logEntry`
        })
      ))
  };
}
 body {
  font: normal 12px/16px verdana, arial;
}

.logEntry {
  margin: 5px 0;
}

.logEntry:before {
  content: '• ';
  vertical-align: middle;
}

code {
  background-color: #eee;
  color: green;
  padding: 1px 2px;
}
 <pre></pre>

原文由 KooiInc 发布,翻译遵循 CC BY-SA 4.0 许可协议

添加 2 天:

 var theDate = new Date("10/28/2011");
theDate.setDate(theDate.getDate()+2);

原文由 Mike C 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题