我在这里要做的是 - 我想仅为每周的工作日提供索引。
所以,如果在一周,周一和周三是假期,那么周二应该得到1,周四应该得到2,周五应该得到指数3.否则,在没有任何假期的正常周,周一应该得到1,周二2,星期三3,等等...
以下是我编写的代码(我现在没有编写代码,所以请原谅粗略的方法)
工作表'Holidays'
包含从第2行开始的B列中的假期列表
变量date
是我想找出
变量dayOfTheWeek
是从上周日算起的“日期”的天数,因此如果date
是星期一,则dayOfTheWeek
为1;如果date
是星期二,dayOfTheWeek
是2,依此类推......
function indexOfWorkdayOfTheWeek (date, dayOfTheWeek, lastSundayDate)
{
var activeSheet = SpreadsheetApp.getActiveSpreadsheet();
var activeCell = activeSheet.getActiveRange();
var activeRow = activeCell.getRowIndex();
var activeColumn = activeCell.getColumn();
var count = 1;
for (var j = 1; j < dayOfTheWeek; j++)
{
var date2 = lastSundayDate.valueOf() + j*86400;
Logger.log('Date ' + j + ' is:' + date2);
Logger.log('Last Sunday is:' + lastSundayDate);
if (holidayOrNot(date2) == true)
{
}
else
{
count = count + 1;
}
}
return count;
}
function holidayOrNot(date2)
{
var holidaysSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Holidays');
var listOfHolidays = holidaysSheet.getSheetValues(2, 2, 95, 1);
var isDateMatch = false;
for (var k = 0; k < 90; k++)
{
if (date2 == listOfHolidays[k].valueOf())
{
isDateMatch = true;
break;
}
else
{
continue;
}
}
return isDateMatch;
}
我认为这个问题有两个方面:
date2
计算由于某种原因无效(var date2 = lastSundayDate.valueOf() + j*86400;
)
函数holidayOrNot
返回false,无论如何,即使它遇到假期......条件date2 == listOfHolidays[k]
因某种原因无效......
帮助将不胜感激!
答案 0 :(得分:2)
下面这个方法也许可以帮助你进行计算,它返回一个对应于一年中某一天的整数,所以如果你把这个应用到你的假期日并与感兴趣的天数比较,这可能是找到匹配的好方法
就是这样,只需在脚本中的任何函数之外添加这些行(这样你就可以在任何地方使用它)然后像这样使用它:
var d = new Date().getDOY();
Logger.log(d)
这里的方法:
Date.prototype.getDOY = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
}
答案 1 :(得分:0)
假设lastSundayDate
正确传递,我看到一个明显的问题:
lastSundayDate.valueOf()
。
valueOf()
会返回原始值 ...看起来您要在日期中添加一天(86400秒* j)的?我不知道这里应该是什么逻辑。但是valueOf()
date2 肯定会给你一个整数:1384628769399
(见here)。
您真正想要完成的是类似Date.getDay()
或类似的内容,以便您可以在原始日期中添加小时,天等。这可能是你所有问题的根源。
您可以做的是阅读Date对象上的Mozilla Developer Network documentation以查看日期及其用途的所有功能。您可以通过使用这些函数大大简化您尝试执行的操作,而不是像j * 86400
那样执行抽象操作。
还应注意,您可以执行以下简单操作,将4小时添加到当前日期(时间):
var myDate = new Date();
Logger.log(myDate); // ~ console.write
var laterDate = new Date(myDate.setHours(myDate.getHours() + 4));
Logger.log(laterDate); // ~ console.write
给出以下内容:
[13-11-16 14:13:38:947 EST] Sat Nov 16 14:13:38 GMT-05:00 2013
[13-11-16 14:13:38:954 EST] Sat Nov 16 18:13:38 GMT-05:00 2013
使用日期可能很棘手 - 但最好使用可用的最简单方法,这些方法内置于Date对象本身。还有许多其他库为日期提供扩展功能,例如Date js。
如果您在尝试使用上面显示的方法后仍遇到问题,请运行您的脚本并发布执行脚本和记录器的内容,以便我可以帮助您缩小问题范围:)