【问题标题】:DateJS - Do Not Include WeekndsDateJS - 不包括周末
【发布时间】:2017-05-21 22:19:27
【问题描述】:

我在我的网站上设置了 DateJS,让用户能够知道他们何时会收到包裹。

我正在使用DateJS 脚本来执行此操作。

我需要修改脚本,以便在估算交货日期时不包括周末。

例如,今天(星期五),如果有人选择以下选项之一:

Next Day Air:应该显示星期一,而不是星期六 两天的空气:它应该显示星期二,而不是星期日 三日空气:应该显示星期三,而不是星期一

非常感谢您的帮助。

<div class="panel-body">
     <table class="table table-striped">
        <thead>
          <th>Shipping Method</th>
          <th>Estimated Delivery</th>
        </thead>
        <tbody>
          <tr>
            <td>3 Day Select</td>
            <td><span class="fromDate-1"></span>
             <script>
               var fromDate = Date.today().addDays(3);
                if (fromDate.is().saturday() || fromDate.is().sunday())
                 fromDate = fromDate.next().monday();
                 $('.fromDate-1').html(fromDate.toString('dddd MMMM dS'));
             </script>
           </td>
          </tr>
          <tr>
            <td>2nd Day Air</td>
            <td><span class="fromDate-2"></span>
              <script>
                var fromDate = Date.today().addDays(2);
                if (fromDate.is().saturday(1) || fromDate.is().sunday())
                fromDate = fromDate.next().monday();
                $('.fromDate-2').html(fromDate.toString('dddd MMMM dS'));
              </script>
            </td>
          </tr>
          <tr>
            <td>Next Day Air</td>
            <td>
               <span class="fromDate-3"></span>
               <script>
                  var fromDate = Date.today().addDays(1);
                  if (fromDate.is().saturday() || fromDate.is().sunday())
                   fromDate = fromDate.next().monday();
                   $('.fromDate-3').html(fromDate.toString('dddd MMMM dS'));
               </script>
              </td>
             </tr>
          </tbody>
       </table>
    </div>

【问题讨论】:

    标签: javascript datejs


    【解决方案1】:

    我根本不会为此使用日期库,它非常简单。

    货物似乎只在工作日运输,所以你需要一个增加工作日的函数,而不是你当前的算法,就像exclude weekends in javascript date calculation的答案一样。

    以下操作类似于仅添加工作日,它仅对少数天(例如 0 到 10)有效。

    /* Add business days to a date.
    ** @param {Date} date - date to start from
    ** @param {number} deliveryDays - positive integer
    ** @returns {Date} a new Date object for the delivery date
    */
    function getDeliveryDate(date, deliveryDays) {
      // Default delivery is 3 days
      deliveryDays = typeof deliveryDays == 'undefined'? 3 : deliveryDays;
      // Copy date so don't modify original
      var d = new Date(+date);
      // Add days. If land on a Saturday or Sunday, move another day
      while (deliveryDays--) {
        d.setDate(d.getDate() + 1);
        if (!(d.getDay() % 6)) ++deliveryDays;
      }
      return d;
    }
     
    // Some examples
    [
     [new Date(2017,0,7),3],  // Saturday start, 3 day delivery
     [new Date(2017,0,8),1],  // Sunday start, 1 day delivery
     [new Date(2017,0,13),1], // Friday start, 1 day delivery
     [new Date(2017,0,13),3], // Friday start, 3 day delivery
     [new Date(2017,0,9), 3], // Monday start, 3 day delivery
     [new Date(2017,0,8), 7]  // Sunday start, 7 day delivery
    ].forEach(function(d) {
      console.log('Ordered day  : ' + d[0].toString() + 
                  '\nDelivery days: ' + d[1] +
                  '\nDelivery on  : ' + getDeliveryDate(d[0], d[1]));
    });

    【讨论】:

      【解决方案2】:

      在添加天数后,您仅将周末视为最后日期,而不是将周末视为开始或(在 3 天的情况下)之间的天数。为什么不是像

      这样的函数
      function addDays(date, daysToAdd) {
          for (let i=0; i<daystoAdd; i++) {
              let nextDay = date.addDays(1);
              if (nextDay.is().saturday()) {
                  nextDay = date.next().monday();
              }
              date = nextDay;
          }
       return date;
       }
      

      然后您只需为每个跨度调用该函数:

      $('.fromDate-1').html(addDays(Date.today(), 3));
      

      这就是你要解决的问题吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多