Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在谷歌工作表中,当小时数超过24小时时,我如何获得持续时间的天数?_Javascript_Google Sheets_Days_Hour_Minute - Fatal编程技术网

Javascript 在谷歌工作表中,当小时数超过24小时时,我如何获得持续时间的天数?

Javascript 在谷歌工作表中,当小时数超过24小时时,我如何获得持续时间的天数?,javascript,google-sheets,days,hour,minute,Javascript,Google Sheets,Days,Hour,Minute,我使用的是google sheets,它的持续时间值为69:41:00,即69小时41分钟0秒。似乎没有一个函数可以将它转换为天、小时和分钟,所以我做了一些搜索,有些人建议使用自定义函数。不确定它到底是如何工作的,但对原始版本做了一些修改,以满足我的需要。代码如下: /** *将持续时间设置为天、小时、分钟 * *@param{duration}输入值。 *@返回天、小时、分钟。 *@customfunction */ 函数格式持续时间(持续时间){ //检索小时和分钟 var hrs=dur

我使用的是google sheets,它的持续时间值为69:41:00,即69小时41分钟0秒。似乎没有一个函数可以将它转换为天、小时和分钟,所以我做了一些搜索,有些人建议使用自定义函数。不确定它到底是如何工作的,但对原始版本做了一些修改,以满足我的需要。代码如下:

/**
*将持续时间设置为天、小时、分钟
*
*@param{duration}输入值。
*@返回天、小时、分钟。
*@customfunction
*/
函数格式持续时间(持续时间){
//检索小时和分钟
var hrs=duration.getHours();
变量天数=数学下限(小时/24);
var小时数=小时数%24;
var mins=duration.getMinutes();
//将结果转换为用于计算的数字
var结果=天+天+小时+小时+分钟+分钟;
返回结果;
}
getHours
是对象
Date
的一种方法

var t = new Date;
t.getHours();

您如何期望从
日期
对象获得超过24小时的时间?它与您期望的持续时间不同。日期是指日历中的时间点,所以你最多可以得到任何一天的23:59:59。您可以获得
date2-date1=millizes
diff,并对其进行处理,如下所示

函数格式持续时间(日期1、日期2){
var毫秒=date2-date1;
var mins=数学下限((毫秒/(1000*60))%60);
变量小时=数学下限((毫秒/(1000*60*60))%24);
变量天数=数学下限(毫秒/(1000*60*60*24));
var结果=天+天+小时+小时+分钟+分钟;
控制台日志(结果);
}
格式期限(新日期(2000,5,1,5,13,0,0),

新日期(2000、5、2、15、31、0、0))
我要添加,为什么不使用

ʺd\d hh\h mm\mʺ ?
这在Excel中可以正常工作,但在GS中不行,因为它使用不同的日期基准,所以像69:41:00这样的持续时间将被解释为1/1/1900 21:41,并且日期不正确。所以你必须像这样把它分解成天(整数)和小时+分钟(一天的分数)

=text(int(A1),ʺ#0\d ʺ)&text(mod(A1,1),ʺHH\h MM\mʺ)
如果你愿意,你可以通过调整日期使它在谷歌脚本中工作——应该可以工作1个月

在日期中添加2的原因是,像03:21:00(少于一天)这样的时间被视为日期-即1899年12月30日!所以我在上面加了2,使之成为1900年1月1日。但是,现在日期的日期部分是1,我希望它是零。所以我必须从下一天减去1

这种奇怪的行为可能就是为什么建议您以另一种方式执行并在毫秒内工作,但我只是想看看是否有办法使原始代码工作

/**
 * Format Duration to Days,Hours,Minutes
 *
 * @param {duration} input value.
 * @return Days,Hours,Minutes.
 * @customfunction
 */
function FormatDuration(duration) {
  // Add 2 days to the date
  var date=new Date(duration.setDate(duration.getDate()+2));
  Logger.log(date.getDate());
  var hours = duration.getHours();  
  // Take 1 off the day part of the date  
  var days = date.getDate()-1;
  var mins = duration.getMinutes();

  // Convert the result to a number to use in calculations
  var result = days + 'd ' + hours + ' h '+ mins+' min';
  return result;
}

对于excel中的“69:41:00”,持续时间给出的字符串值为Mon“Jan 01 1900 13:38:17 GMT+0800(HKT)”。我无法获取单元格中显示的值?这种方式有效。我在《61:44:00》中得到了《2d 13小时38分钟》。我尝试了其他值,分钟似乎总是少6分钟。知道为什么吗?另外,你能解释一下“(duration.getDate()+2)”和“date.getDate()-1”的用途吗?谢谢你接受这个答案。嗯,我对会议记录没有意见。无论如何,我将在我的答案中添加+2和-1的解释。
/**
 * Format Duration to Days,Hours,Minutes
 *
 * @param {duration} input value.
 * @return Days,Hours,Minutes.
 * @customfunction
 */
function FormatDuration(duration) {
  // Add 2 days to the date
  var date=new Date(duration.setDate(duration.getDate()+2));
  Logger.log(date.getDate());
  var hours = duration.getHours();  
  // Take 1 off the day part of the date  
  var days = date.getDate()-1;
  var mins = duration.getMinutes();

  // Convert the result to a number to use in calculations
  var result = days + 'd ' + hours + ' h '+ mins+' min';
  return result;
}