我是编程领域的新手:D和我对小时数的比较感到怀疑。
我有一张包含以下信息的表
Name | Time out | Time in |
nam_1 10:00:00
nam_2 09:00:00
已使用以下代码输入超时时间:
var start = Utilities.formatDate (new Date (), "Europe / Berlin", "HH: mm: ss");
sheet.appendRow([name, start]);
我想尝试的是:
var time_in = "13:00:00";
if time out> 13:00:00:
sheet.getRange(j+1, 2).setValue(time_in);
问题是我不知道该怎么做。我现在尝试的是:
function getTimeFromDateStartUserInput(date) {
return Utilities.formatDate(date, "Europe/Berlin", "HH:mm:ss");
}
function insertTimeIn(){
var file = DriveApp.getFilesByName("MySheet");
var doc = SpreadsheetApp.open(file.next());
var sheet = doc.getSheetByName("Sheet1");
if(sheet!=null){
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
var time_in = new Date ('30/12/1899 17:00:00');
time_in.setHours(13,0,0,0);
var inFormated = getTimeFromDate(time_in);
for(var i = 0; i<values.length; i++){
if(values[i][1]>=inFormated && values[i][2]=""){
sheet.getRange(j+1, 2).setValue(time_in);
}else{
sheet.getRange(j+1, 2).setValue("Nop");
}
}
}
但是,用该代码我什么都没做。
我认为问题可能是“超时”列中的任何条目都具有以下设计:星期六,格林尼治标准时间12月30日14:51:22 + 11:00 1899。
因此,我认为它不起作用,因为我正在将一个小时与一个完整的Date对象进行比较。
我认为合乎逻辑的事情是为所有值的输入[i] [1]调用函数getTimeFromDateStartUserInput,但我不知道该怎么做。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
这是我对您要尝试执行的操作的猜测。它不起作用,因为它仍然包含错误。我对其中一些进行了评论,但无法修复,因为仍不清楚您要做什么。
function insertTimeIn(){
var files = DriveApp.getFilesByName('SpreadsheetName');
var n=0;
while(files.hasNext()){
var file=files.next();
}
if(++n>1){
throw("Error: There is more than one file with that name in function insertTimeIn");
return;
}
if(file.getMimeType()==MimeType.GOOGLE_SHEETS){
var doc=SpreadsheetApp.openById(file.getId());
var sheet=doc.getSheetByName("Sheet1");
if(sheet!=null){
var dataRange=sheet.getDataRange();
var values=dataRange.getValues();
var time_in=new Date(1899,11,30,13,0,0);
var inFormated=Utilities.formatDate(time_in, Session.getScriptTimeZone(), "HH:mm:ss");//it returns a string not a date
for(var i=0;i<values.length;i++){
if(values[i][1]>=inFormated && values[i][2]=""){//informated is a string not a date so greater than doesn't really make much sense here.
sheet.getRange(j+1, 2).setValue(time_in);//j is undefined
}else{
sheet.getRange(j+1, 2).setValue("Nop");//again j is undefined
}
}
}
}
}
答案 1 :(得分:0)
一个简单的答案可能是将初始时间戳自动转换为当前日期。我不能完全确定工作表的用途,但是我使用工作表输入时间并使用函数onEdit()来验证用户是否正确输入了dateTime。
function onEdit(){
if(cell.getValue() instanceof Date === true){
if(cell.getValue().getFullYear()<2018 ){
formatDate();
}
}
}
function formatDate() {
var timeValue, cell,hour,minute,time,row,dateObj,month,day,year,newDate
cell = SpreadsheetApp.getActive().getActiveCell()
timeValue = cell.getValue()
hour = timeValue.getHours()
minute = timeValue.getMinutes() < 10? '0'+timeValue.getMinutes(): timeValue.getMinutes();
time = hour+":"+minute
row = cell.getRow()
dateObj = new Date();
month = dateObj.getUTCMonth() + 1; //months from 1-12
day = dateObj.getUTCDate();
year = dateObj.getUTCFullYear();
newDate = month + "/" + day + " "+ time; // formatted dateTimestamp to replace timestamp with
cell.setValue(newDate)
}
让我知道这是否对您有用。在我的应用程序中,onEdit函数检查活动单元格,如果输入的值是dateTime,则继续。如果是的话,它将检查日期是哪一年(时间值本身会自动为12/30/1899,因此,当获取介于dateTimestamp和没有日期的时间戳之间的持续时间时,会抛出通配符。