Jquery 日期选择器:禁用数据中的日期
我有一个日期选择器,它可以从现在(开始)到12周(结束)之间的3周。我想添加一个条件,如果该跨度上的日期已经在数据(电子表格)中,它也将被禁用。请参见下面的脚本:Jquery 日期选择器:禁用数据中的日期,jquery,google-apps-script,Jquery,Google Apps Script,我有一个日期选择器,它可以从现在(开始)到12周(结束)之间的3周。我想添加一个条件,如果该跨度上的日期已经在数据(电子表格)中,它也将被禁用。请参见下面的脚本: <script> var data = SpreadsheetApp .openById('Spreadsheet ID') .getSheetByName("VL Request") .getDataRange() .getValues();
<script>
var data = SpreadsheetApp
.openById('Spreadsheet ID')
.getSheetByName("VL Request")
.getDataRange()
.getValues();
var datefiled = [0];
var userName = Session.getEffectiveUser().getUsername();
$( function() {
//enable next week onwards
var date = new Date();
var weekday = date.getDay();
var daysTillWeekOver = 21 - weekday;
var enddayofweek = daysTillWeekOver + 5;
$("#datepicker").datepicker({
minDate:daysTillWeekOver,
maxDate: "3M" + enddayofweek
});
} );
</script>
var数据=电子表格应用程序
.openById(“电子表格ID”)
.getSheetByName(“VL请求”)
.getDataRange()
.getValues();
var datefield=[0];
var userName=Session.getEffectiveUser().getUsername();
$(函数(){
//从下周开始启用
变量日期=新日期();
var weekday=date.getDay();
var daysTillWeekOver=21-工作日;
var enddayofweek=daysTillWeekOver+5;
$(“#日期选择器”)。日期选择器({
minDate:Daysillweekover,
最大日期:“3M”+周末结束
});
} );
我想添加一个条件,即如果用户为该日期(DateField)存档,则将在该用户的日期选择器上禁用该日期,以便用户避免在该日期存档副本。您想限制JQuery日期选择器以排除用户先前选择的日期。这意味着每次使用脚本时,要排除的日期可能会有所不同 主题(@Amal的道具)显示datepicker脚本需要一个简单的日期数组。然而,我发现每个显示BeforeShowDay用法的示例都假定排除的日期硬编码到脚本中。这在您的场景中是不可接受的,因为用户的可变性以及用户先前选择的日期 下面是一个完整的webapp,它获取电子表格数据并搜索用户名实例,获取相关VL日期,将日期推送到webapp读取的数组中,然后由日期选择器拾取并反映在浏览器中
排除日期的示例
function doGet(request) {
return HtmlService.createTemplateFromFile('Page')
.evaluate();
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}
function getuserdates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = "VL Request";
var datasheet = ss.getSheetByName(sheetname);
// assume user name
//var userName = Session.getEffectiveUser().getUsername()
var username = "user1";
// set variables
var datafirstrow = 2;
var dataLR = datasheet.getLastRow();
var dataLC = datasheet.getLastColumn();
var datasheetRange = datasheet.getRange(datafirstrow,1, dataLR-datafirstrow+1, dataLC);
//Logger.log(datasheetRange.getA1Notation());
// sort the data by date
datasheetRange.sort(6); // sort by Column F - VL date
var datasheetData = datasheetRange.getDisplayValues();
//Logger.log(datasheetData);
// get the user names as an array
var datanames = datasheetData.map(function(e){return e[2];});//[[e],[e],[e]]=>[e,e,e]
//Logger.log(datanames); // DEBUG
//Logger.log(datanames.length) // DEBUG
// create an array to hold any dates
var userdates = [];
// loop through the user names; test for equivalence to "username", and save VF date to an array
for (var i=0;i<datanames.length;i++){
//Logger.log("dataname = "+datanames[i])
if (datanames[i] === username){
// Logger.log("DEBUG: i= "+i+", user name = "+datanames[i]+", VL date = "+datasheetData[i][5]);
//userdates.push('"' + datasheetData[i][5]+ '"');
userdates.push(datasheetData[i][5]);
}
else{
// Logger.log("DEBUG: i= "+i+" - no match");
}
}
// resort the data by Timestamp
datasheetRange.sort(1); // sort by Column A
if (userdates.length !=0){
//Logger.log("There are "+userdates.length+" previous dates for this user.");//DEBUG
}
else{
//Logger.log("There no previous dates for this user");//DEBUG
}
//Logger.log(userdates);
return userdates;
}
道具和他们的建议,用于设计将日期数组传递给webappjavascript的方法
链接到
链接到
注意:脚本假定用户名为“user1”。但是有一行注释(var userName=Session.getEffectiveUser().getUsername()
)可用于返回实际用户并基于该用户选择日期
需要注意的关键事项是:
(在JavaScript.html中)的基本代码是由Amal提出的数据采集器排除
- 这被包装在一个带有SuccessHandler的
中,该函数调用函数
(在code.gs中),该函数返回用户先前选择的日期getuserdates()
function doGet(request) {
return HtmlService.createTemplateFromFile('Page')
.evaluate();
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}
function getuserdates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = "VL Request";
var datasheet = ss.getSheetByName(sheetname);
// assume user name
//var userName = Session.getEffectiveUser().getUsername()
var username = "user1";
// set variables
var datafirstrow = 2;
var dataLR = datasheet.getLastRow();
var dataLC = datasheet.getLastColumn();
var datasheetRange = datasheet.getRange(datafirstrow,1, dataLR-datafirstrow+1, dataLC);
//Logger.log(datasheetRange.getA1Notation());
// sort the data by date
datasheetRange.sort(6); // sort by Column F - VL date
var datasheetData = datasheetRange.getDisplayValues();
//Logger.log(datasheetData);
// get the user names as an array
var datanames = datasheetData.map(function(e){return e[2];});//[[e],[e],[e]]=>[e,e,e]
//Logger.log(datanames); // DEBUG
//Logger.log(datanames.length) // DEBUG
// create an array to hold any dates
var userdates = [];
// loop through the user names; test for equivalence to "username", and save VF date to an array
for (var i=0;i<datanames.length;i++){
//Logger.log("dataname = "+datanames[i])
if (datanames[i] === username){
// Logger.log("DEBUG: i= "+i+", user name = "+datanames[i]+", VL date = "+datasheetData[i][5]);
//userdates.push('"' + datasheetData[i][5]+ '"');
userdates.push(datasheetData[i][5]);
}
else{
// Logger.log("DEBUG: i= "+i+" - no match");
}
}
// resort the data by Timestamp
datasheetRange.sort(1); // sort by Column A
if (userdates.length !=0){
//Logger.log("There are "+userdates.length+" previous dates for this user.");//DEBUG
}
else{
//Logger.log("There no previous dates for this user");//DEBUG
}
//Logger.log(userdates);
return userdates;
}
getuserdates()
var datasheetData=datasheetRange.getDisplayValues()代码>:从一开始就获得所有数据:
datasheetRange.sort(6)代码>(F列以非零为基础):数据按日期排序,以使输出符合日期顺序:
e[2]`将访问C列,或以零为基础访问第2列)var datanames=datasheetData.map(函数(e){returne e[2];});':用户名列表是使用Javascript[map]提取的(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)方法。
var userdates=[]代码>:设置一个临时数组以捕获以前的日期
userdates.push(“''+datasheetData[i][5]+'”)代码>:脚本循环用户名,匹配运行脚本的用户的名称,并将相关VL日期提取到临时数组
datasheetRange.sort(1)代码>:电子表格数据通过时间戳重新调用
:脚本测试是否捕获了以前的日期if(userdates.length!=0){
如下所示:userdates
[“2019年11月11日”、“2019年11月15日”、“2019年11月16日”、“2019年11月17日”、“2019年11月24日”]
:开始日期为从今天起3周:minDate
“+3W”
:结束日期为从今天起12周:maxDate
“+12W”
:这是用于排除特定日期的日期选择器参数。值beforeShowDay
从userdates
getuserdates()返回
定义一个m/d/y的日期格式,然后$thisdate
:使用JQuery方法测试数组日期是否等于日历日期;如果不匹配,则返回-1。因此,当进行匹配时,函数返回“false”=0,并且日历中的日期为“灰显/模糊”如果($.inArray($thisDate,userdates)==-1){
代码.gs
function doGet(request) {
return HtmlService.createTemplateFromFile('Page')
.evaluate();
}
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename)
.getContent();
}
function getuserdates() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetname = "VL Request";
var datasheet = ss.getSheetByName(sheetname);
// assume user name
//var userName = Session.getEffectiveUser().getUsername()
var username = "user1";
// set variables
var datafirstrow = 2;
var dataLR = datasheet.getLastRow();
var dataLC = datasheet.getLastColumn();
var datasheetRange = datasheet.getRange(datafirstrow,1, dataLR-datafirstrow+1, dataLC);
//Logger.log(datasheetRange.getA1Notation());
// sort the data by date
datasheetRange.sort(6); // sort by Column F - VL date
var datasheetData = datasheetRange.getDisplayValues();
//Logger.log(datasheetData);
// get the user names as an array
var datanames = datasheetData.map(function(e){return e[2];});//[[e],[e],[e]]=>[e,e,e]
//Logger.log(datanames); // DEBUG
//Logger.log(datanames.length) // DEBUG
// create an array to hold any dates
var userdates = [];
// loop through the user names; test for equivalence to "username", and save VF date to an array
for (var i=0;i<datanames.length;i++){
//Logger.log("dataname = "+datanames[i])
if (datanames[i] === username){
// Logger.log("DEBUG: i= "+i+", user name = "+datanames[i]+", VL date = "+datasheetData[i][5]);
//userdates.push('"' + datasheetData[i][5]+ '"');
userdates.push(datasheetData[i][5]);
}
else{
// Logger.log("DEBUG: i= "+i+" - no match");
}
}
// resort the data by Timestamp
datasheetRange.sort(1); // sort by Column A
if (userdates.length !=0){
//Logger.log("There are "+userdates.length+" previous dates for this user.");//DEBUG
}
else{
//Logger.log("There no previous dates for this user");//DEBUG
}
//Logger.log(userdates);
return userdates;
}
功能数据集(请求){
返回HtmlService.createTemplateFromFile('页面')
.评估();
}
函数包括(文件名){
返回HtmlService.createHtmlOutFromFile(文件名)
.getContent();
}
函数getuserdates(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheetname=“VL请求”;
var数据表=ss.getSheetByName(sheetname);
//使用用户名
//var userName=Session.getEffectiveUser().getUsername()
var username=“user1”;
//设置变量
var datafirstrow=2;
var dataLR=datasheet.getLastRow();
var dataLC=datasheet.getLastColumn();
var datasheetRange=datasheet.getRange(datafirstrow,1,dataLR datafirstrow+1,dataLC);
//Logger.log(datasheetRange.getA1Notation());
//按日期对数据进行排序
datasheetRange.sort(6);//按F列排序-VL日期
var datasheetData=datasheetRange.getDisplayValues();
//Logger.log(数据表数据);
//将用户名作为数组获取
var datanames=datasheetData.map(函数(e){returne e[2];});//[[e],[e]]=>[e,e,e]
//Logger.log(数据名);//调试
//Logger.log(datanames.length)//调试
//创建一个数组来保存任何日期
var用户日期
<style>
.demo { margin: 30px ; color : #AAA ; font-family : arial sans-serif ;font-size : 10pt }
p { color : red ; font-size : 14pt }
</style>