首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateJS -不包括Weeknds

DateJS -不包括Weeknds
EN

Stack Overflow用户
提问于 2017-01-07 12:31:46
回答 2查看 142关注 0票数 0

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

我正在利用DateJS脚本来做这件事。

我需要修改脚本,以便它不包括周末时,估计交付日期。

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

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

非常感谢您的帮助。

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

发布于 2017-01-07 14:35:26

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

看起来货物只在工作日运输,所以你需要一个增加工作日的函数,而不是你当前的算法,类似于的答案。

下面的操作类似于添加工作日,它只在很少的几天内有效(比如0到10)。

代码语言:javascript
复制
/* 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]));
});

票数 1
EN

Stack Overflow用户

发布于 2017-01-07 14:32:22

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

代码语言:javascript
复制
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;
 }

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

代码语言:javascript
复制
$('.fromDate-1').html(addDays(Date.today(), 3));

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41517796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档