代码之家  ›  专栏  ›  技术社区  ›  Tommaso Taruffi

javascript-获取字符串的第二天

  •  8
  • Tommaso Taruffi  · 技术社区  · 15 年前

    我有一个VAR 示例=“05-10-1983”

    我怎样才能得到“第二天”的弦乐 例子 ?

    我试过使用日期对象…但什么都没有…

    8 回复  |  直到 9 年前
        1
  •  12
  •   Paolo Bergantino    15 年前

    这将适用于简单的场景,如您拥有的场景:

    var example = '05-10-1983';
    var date = new Date();
    var parts = example.split('-');
    date.setFullYear(parts[2], parts[0]-1, parts[1]); // year, month (0-based), day
    date.setTime(date.getTime() + 86400000);
    alert(date);
    

    本质上,我们创造了一个空的 Date object 并将年、月和日期设置为 setFullYear() 功能。然后我们用 getTime() 加上1天(86400000毫秒),然后使用 setTime() 功能。

    如果您需要比这更复杂的东西,比如支持不同的格式和类似的东西,您应该看看 datejs library 这对你有很大的帮助。

        2
  •  5
  •   michaeldwp    12 年前

    您可以执行以下操作:

    var nextDay;
    var example = "05-10-1983";
    
    nextDay = new Date(example);
    nextDay.setDate(nextDay.getDate() + 1);
    

    #getDate / #setDate 获取/设置当月的当前日期(1-31)。

    运行完以上步骤后, nextDay 将设置为明天的日期。如果是月底的话,这也将滚动到下个月/年,甚至处理闰年。:)

        3
  •  4
  •   Jimmy    15 年前
    new Date(+new Date('05-10-1983'.replace(/-/g,'/')) + 24*60*60*1000)
    
        4
  •  3
  •   HoLyVieR    13 年前

    +86400000方法的问题是,当跨越夏令时屏障时,可能出现错误。 例如,我在东部时间。 如果我这样做:

    var d = new Date("11/04/2012 00:00:00");
    var e = new Date(d.getTime() + 86400000);
    

    E将是2012年11月4日23:00:00 如果只提取日期部分,则会得到错误的值。我最近在写日历控件时遇到了这个问题。

    这样做会更好(并且有一个灵活的补偿,可以让你在未来做一天以上):

    function getTomorrow(d,offset) {
        if (!offset) { offset = 1 }
        return new Date(new Date().setDate(d.getDate() + offset));
    }
    
        5
  •  2
  •   moritz    12 年前

    所以

    var d = new Date("11/04/2012 00:00:00");
    var e = new Date(d.getTime() + 86400000);
    

    因为日光不足而不能工作。我也遇到了同样的问题。我最后做了这样的事情:

    function next_day(date) {
      var e = new Date(date.getTime() + 24 * 60 * 60 * 1000);
      if e.getHours() != date.getHours() {
        e = new Date(e.getTime() + (e.getHours() - date.getHours()) * 60 * 60 * 1000)
      }
      return e;
    }
    
        6
  •  0
  •   user142019    15 年前

    您可以使用名为php.js的框架。谷歌。这包括高级日期功能等

        7
  •  0
  •   DeadDork    9 年前

    有闰秒、闰日、DST等,所以这在所有情况下都是一个棘手的问题。

    在我看来,解决这个问题(没有日期库)的最佳方法是利用日期构造函数溢出特性[1]:

    main();
    
    function main() {
      var date = uniqueDateParse( '05-10-1983' );
      var newDate = nextDay( date );
    
      print( date );
      print( newDate );
    }
    
    function uniqueDateParse( string ) {
      var stringArray = string.split( '-', 3 );
      var month = stringArray[ 0 ],
          day   = stringArray[ 1 ],
          year  = stringArray[ 2 ];
      // Per ISO 8601[2], using Pacific Daylight Time[3].
      var dateString = year + '-' + month + '-' + day + 'T00:00:00-07:00';
      return new Date( dateString );
    } 
    
    function nextDay( date ) {
      return new Date( date.getFullYear()
                     , date.getMonth()
                     , date.getDate() + 1 );
    }
    
    function print( object ) {
      console.log( object );
    }
    

    链接

    〔1〕 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Parameters

    〔2〕 http://www.w3.org/TR/NOTE-datetime

    〔3〕 http://www.timeanddate.com/time/zones/pdt

        8
  •  -1
  •   Thirumalai murugan JJacquelin    11 年前

    您可以通过以下方式找到日索引: getDay() 按以下方式运行并创建一个天数字符串数组-

    day = new Date(YourDate);
    
    var dayArray = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
    
    day = dayArray[day.getDay()+1];