如何将日期和时间值加入datetime并将其设置为单元格?

如何解决如何将日期和时间值加入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点,有一个单元格需要输入日期+时间(输出错误!)

Example Sheet

解决方法

这是您的数据问题,而不是您的代码,尽管我不想评论代码,因为它是用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 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-