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

Adding 1 or 2 days to a date string

本文关键字:2天 添加 日期 字符串      更新时间:2023-09-26

我有一个字符串,可能是date = "10/08/2011";英文时间样式。

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

我已经尝试了一些事情,但不能工作,因为我通常是一个PHP的家伙不是JavaScript。

感谢您的帮助。

感谢李

为什么这看起来这么难,我已经被困在这个一个小时了.....我想给代码一个普通字符串,即mm/dd/yyyy - 10/08/2011,我想要返回类似11/08/2011的东西

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

)

事情没那么复杂:

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

添加2天:

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

必须强制将字符串解释为日期-月-年或月-日-年,否则将取决于用户的设置。

您可以从字符串中组装日期以确保日期-月格式:

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

试试这个

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();

您需要将String转换为Date-Object。这样你就可以调用。getdate()和setDate()函数来修改日期。

但要实现这一点,日期必须采用以下格式之一:

  1. MM/dd/yyyy
  2. yyyy/MM/dd
  3. ;
  4. mm dd, yyyy
  5. MMM dd, yyyy

所以,也许你必须在转换之前在字符串中切换日和月,因为我不确定月或日是你的第一个数字。

对于欧洲日期,您可以像这样将字符串更改为正确的格式:

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

编辑:

JSFiddle的一个例子:http://jsfiddle.net/4W8yM/11/

我试了一下,得到了结果。

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('/'))