Javascript-前一个工作日的变量

Javascript - variable previous business day

本文关键字:一个 工作日 变量 Javascript-      更新时间:2023-09-26

我正在尝试创建一个下拉列表,该列表将自动在文本字段中输入日期。

选项"LBD"当前返回昨天的日期,但是,我希望它返回最后一个工作日的日期。因此,如果今天是星期一,它将返回星期五的日期,如果今天为星期二,则返回星期一的日期。等等。

这就是我目前所掌握的:

Javascript:

<script>
$(document).ready(function() {
$("#datetype option").filter(function() {
    return $(this).val() == $("#datepickstart").val();
    return $(this).val() == $("#datepickend").val();
}).attr('selected', true);
    var d = new Date();
var yesterday = (d.getMonth() + 1) + "/" + (d.getDate() - 1) + "/" + d.getFullYear();
var today = (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getFullYear();
var fdm = (d.getMonth() + 1) + '/01/' + d.getFullYear();
var fdy = '01/01/' + new Date().getFullYear();
$("#datetype").on("change", function() {
    var selectedVal = $(this).find("option:selected").attr("value");
    if (selectedVal == 'LBD') {
        $("#datepickstart").val((yesterday));
        $("#datepickend").val((yesterday));
    }
    if (selectedVal == 'MtD') {
        $("#datepickstart").val(fdm);
        $("#datepickend").val(today);
    }
    if (selectedVal == 'YtD') {
        $("#datepickstart").val(fdy);
        $("#datepickend").val(today);
    }
});
})
</script>

html:

<select id="datetype" name="datetype"> 
<option value="">Please select...</option> 
<option value="LBD">LBD</option> 
<option value="MtD">MtD</option> 
<option value="YtD">YtD</option> 
</select>
<input type="text" id="datepickstart" name="datepickstart" value="">
<input type="text" id="datepickend" name="datepickend" value="">

getDay((函数是解决问题的关键。我使用@zzzzBov片段作为迭代器。以下是我的解决方案

step1:
   function isBusinessDay(date){
    var day = date.getDay();
    if(day == 0 || day == 6  ){
        return false;
    }
    return true;
    }

 step2:
    var date = new Date();
    while (!isBusinessDay(date)) { date.setDate(date.getDate() - 1) }
    console.log(date);//date always between monday to friday 

希望这能解决你的问题。编码快乐!!

您可以使用javascript getDay()方法返回一个表示一周中某一天的整数:

getDay((返回的值是一个对应于星期几的整数:0表示星期天,1表示星期一,2表示星期二,依此类推

请参阅MDN 上的getDay((文档

因此,如果getDay((返回0(星期日(或6(星期六(,您可以编写一个返回false的方法。

要实现您的预期结果,请计算天数并减少天数以获得前一个工作日。

$(document).ready(function() {
  $("#datetype option").filter(function() {
    return $(this).val() == $("#datepickstart").val();
    return $(this).val() == $("#datepickend").val();
  }).attr('selected', true);
  var d = new Date();
  var bd = d.getDay();
  if (bd < 2) {
    if (bd == 0) {
      bd = 2;
    } else {
      bd = 3;
    }
  } else {
    bd = 1;
  }
  var today = (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getFullYear();
  var lbd = (d.getMonth() + 1) + "/" + (d.getDate() - bd) + "/" + d.getFullYear();
  var fdm = (d.getMonth() + 1) + '/01/' + d.getFullYear();
  var fdy = '01/01/' + new Date().getFullYear();
  $("#datetype").on("change", function() {
    var selectedVal = $(this).find("option:selected").attr("value");
    if (selectedVal == 'LBD') {
      $("#datepickstart").val(lbd);
      $("#datepickend").val(today);
    }
    if (selectedVal == 'MtD') {
      $("#datepickstart").val(fdm);
      $("#datepickend").val(today);
    }
    if (selectedVal == 'YtD') {
      $("#datepickstart").val(fdy);
      $("#datepickend").val(today);
    }
  });
});

Codepen-http://codepen.io/nagasai/pen/wWgQYE

LBD计算部分

  var bd = d.getDay();// get day from today's date which be between 0-6 (0 is Sunday and 6 is Saturday
  if (bd < 2) {
    if (bd == 0) {
      bd = 2;
    } else {
      bd = 3;
    }
  } else {
    bd = 1;
  }
 //variable lbd will get the last business day by reducing the calculated lbd from today's date
  var lbd = (d.getMonth() + 1) + "/" + (d.getDate() - bd) + "/" + d.getFullYear();
function isBusinessDay(theDate){
  theDay = theDate.getDay(); // Get day returns 0-6, respectively Sunday - Saturday
  if(theDay == 0 || theDay == 6){
     return false;
  } else {
     return true;
  }
}

与zzzzBov的while (!isBusinessDay(date)) { date.setDate(date.getDate() - 1) } 一起使用

一种更简洁的书写方式:

function isBusinessDay(theDate){
  theDay = theDate.getDay(); // Get day returns 0-6, respectively Sunday - Saturday
  if(theDay == 0 || theDay == 6) return false;
  return true;
}