如何解决如何将日期和时间值加入datetime并将其设置为单元格?
我想连接两个单元格值。示例:
单元格日期的值:5/11/2020。单元格时间的值:14:00。最终细胞 应该是:2020-05-11 14:00:00。
我这样做的方式是:
sheetDestination.getRange(9,7).setValue(shiftDate + shiftTime);
输出最终为:
2020年5月11日星期一格林尼治标准时间0400(东部夏令时间)范围。
function shiftDuration () {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetDestination = spreadsheet.getSheetByName("NewToImport");
//Time Diff
var timeStartforShift = sheetDestination.getRange(2,4).getDisplayValue(); //start time
var timeEndforShift = sheetDestination.getRange(5,5).getDisplayValue(); //end time
var shiftDuration = Math.floor(parseInt(timeEndforShift) - parseInt(timeStartforShift));
//create a new row to test concatenating date and time
var rangeDurantionToCopy = sheetDestination.getRange(1,1,2,sheetDestination.getMaxColumns());
rangeDurantionToCopy.copyTo(sheetDestination.getRange(8,1));
var shiftEndTime = sheetDestination.getRange(9,5).setValue(timeStartforShift + (shiftDuration * 60));
var shiftDate = sheetDestination.getRange(9,3).getValue();//get the Date for the shift
sheetDestination.getRange(9,7).setValue(shiftDate + shiftEndTime);
}
下面是函数。我要添加一张工作表的图片。基本上,时间表显示一个班次(4小时班次),同一行的每一行都表示1小时。
我正在尝试使其开始和结束时间排成一排,显示的是4小时轮班。例如,从上午10点至下午2点,有一个单元格需要输入日期+时间(输出错误!)
解决方法
这是您的数据问题,而不是您的代码,尽管我不想评论代码,因为它是用googlish编写的,我不理解。
当您打开新工作表时,其所有单元格都已预先格式化为“常规”,这意味着Excel将猜测您输入的数据类型并相应地应用适当的格式。如果输入的内容被Excel识别为日期,则Excel将应用日期格式。如果Excel将条目识别为时间,则将发生同样的情况。但是请注意,您可以在许多方面超越此自动化,并且我们不知道您在工作表中做了什么。
当Excel决定您输入日期(或将单元格设置为日期格式)时,Excel会将您的输入转换为数字。今天的日期是44057。明天将是44058,从1900年1月1日开始计算。
时间表示为一天的一小部分,这意味着小数为1。0.5是半天=中午12点。如果输入 18:00 或 6:00 PM ,Excel会将单元格的值存储为0.75。因此,[Date] + [Time] = [Date / Time]。 44057 + 0.75 = 44057.75。
如果在单元格中输入这样的值-作为数字(您可以尝试相同的数字)-Excel在单元格中显示的内容取决于单元格的格式。如果您将单元格格式设置为* dd mmm yyyy HH:mm:ss“,Excel将显示 2020年8月14日18:00:00 或 2020年8月14日06:00:00 PM ,具体取决于您的“区域设置”。我想GoogleSheets也会这样做。
如果您输入“ 44057.75”,Excel将识别数字,而不是日期。您需要应用日期格式来更改显示。但是,如果您输入“ 2020年8月14日18:00”,Excel将识别出日期/时间值。要使单元格显示其值格式,请将该单元格设置为“常规”或为其指定数字格式。
,为了排除故障,您应该将变量及其类型记录在战略位置
示例:
function shiftDuration () {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetDestination = spreadsheet.getSheetByName("NewToImport");
var timeStartforShift = sheetDestination.getRange(2,4).getDisplayValue(); //start time
// the following returns "string"
Logger.log(typeof timeStartforShift);
var timeEndforShift = sheetDestination.getRange(5,5).getDisplayValue(); //end time
var shiftDuration = Math.floor(parseInt(timeEndforShift) - parseInt(timeStartforShift));
var rangeDurantionToCopy = sheetDestination.getRange(1,1,2,sheetDestination.getMaxColumns());
//careful with this line! You ar overwriting getRange(9,3)!!!
// rangeDurantionToCopy.copyTo(sheetDestination.getRange(8,1));
//the following returns "10:00"120:
Logger.log(timeStartforShift + (shiftDuration * 60));
var shiftEndTime = sheetDestination.getRange(9,5).setValue(timeStartforShift + (shiftDuration * 60));
var shiftDate = sheetDestination.getRange(9,3).getValue();
// the following returns `object` - a date object
Logger.log(typeof shiftDate);
// the following returns `object` - a date object
Logger.log(typeof shiftEndTime);
sheetDestination.getRange(9,7).setValue(shiftDate + shiftEndTime);
}
- 上面示例中的日志显示您正在尝试对不同类型的变量求和
- 这将导致字符串,即已修补在一起的文本
- 您不能使用非数字变量执行数学运算-这也适用于日期对象
您有三个选择:
- 分别作为字符串(例如,使用
getDisplayValues()
)检索您的日期和时间,然后将其“拼凑在一起” - 使用getTime()之类的Javascript日期函数将日期对象转换为ms-即数字,将秒加起来并将总和转换回日期对象
- 使用setHours()和setMinutes()之类的方法修改日期对象
在您的情况下,后一种方法可能是最简单的,并且具有将有效日期而不是文本返回到电子表格的好处。
示例:
function shiftDuration () {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetDestination = spreadsheet.getSheetByName("NewToImport");
var timeStartforShift = sheetDestination.getRange(2,4).getDisplayValue(); //start time
var timeEndforShift = sheetDestination.getRange(5,5).getDisplayValue(); //end time
var shiftDuration = Math.floor(parseInt(timeEndforShift) - parseInt(timeStartforShift));
var hours = timeEndforShift.split(":")[0];
var minutes = timeEndforShift.split(":")[1];
var shiftDate = sheetDestination.getRange(9,3).getValue();
Logger.log("before adding the time: " + shiftDate);
shiftDate.setHours(hours);
shiftDate.setMinutes(minutes);
Logger.log("after adding the time: " + shiftDate);
sheetDestination.getRange(9,7).setValue(shiftDate).setNumberFormat("yyyy-MM-dd hh:mm");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。