Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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 在脚本中从日期中减去日期时出现问题_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 在脚本中从日期中减去日期时出现问题

Javascript 在脚本中从日期中减去日期时出现问题,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我已经编写了以下代码,无法理解为什么它不能在我的Google工作表中工作: function WEEKOF(myDay, myDate) { var wkDate = new Date(myDate); var StartDate = new Date(); StartDate.setDate(wkDate.getDate()-myDay); return StartDate; } =WEEKOF(工作日(A1),A1) A1单元包含:2016年1月5日 返回日期:2017年7

我已经编写了以下代码,无法理解为什么它不能在我的Google工作表中工作:

function WEEKOF(myDay, myDate) {
  var wkDate = new Date(myDate);
  var StartDate = new Date();
  StartDate.setDate(wkDate.getDate()-myDay);
  return StartDate;
}
=WEEKOF(工作日(A1),A1)

A1单元包含:2016年1月5日

返回日期:2017年7月26日

我预计返回时间为:2016年4月29日

天、小时、分、秒的差异 输出天、小时、分钟和秒的日期差函数。“自日期”对象基于时间值,该时间值是自UTC 1970年1月1日以来的毫秒数。time()和valuOf()方法都为我们提供了日期的原始值,即过去某个日期的毫秒数。是的,它可能是一个相当大的数字,但最后只需简单的算术运算。floor(),/,%您就可以轻松地完成计算。您可以根据需要将输出更改为数组或对象

function calcTimeDifference(Start,End)
{
  if(Start && End)
  {
    var second=1000;
    var minute=60*second;
    var hour=minute*60;
    var day=hour*24;
    var t1=new Date(Start).valueOf();
    var t2=new Date(End).valueOf();
    var d=t2-t1;
    var days=Math.floor(d/day);
    var hours=Math.floor(d%day/hour);
    var minutes=Math.floor(d%day%hour/minute);
    var seconds=Math.floor(d%day%hour%minute/second);
    return 'dd:hh:mm:ss\n' + days + ':' + hours + ':' + minutes + ':' + seconds;  
  }
  else
  {
    return 'Invalid Inputs';
  }
}

我不知道这里使用的是什么日期对象,但你确定你可以像这样天真地从日期对象中减去一些东西吗?因为日期不是数字,所以要正确计算日期是非常困难的。它们甚至不是严格的模值。很明显,情况并非如此。这看起来和人们遇到的问题完全一样,因为日期,甚至纪元日期,都不能很好地处理简单的数学问题。好吧,你会从一个简单的值减法中得到意想不到的值,而这个减法的目的是将这些值转换为日期。这是你提出的核心问题。在开发过程中,许多人都会遇到一些微妙的问题,这些问题本来应该是有效的。无论如何,我的建议是像魔鬼读圣经一样阅读API文档,并假设任何关于日期的“简单”数学,甚至大纪元日期,都可能会出现可怕的错误。我不知道Sheets date API的局限性是什么,但每个系统和平台都有自己奇怪的day date行为。例如,看看Java在这个can上的几个技巧。我会听从你的,但是OP已经在为自己的函数使用Sheets API了。这是一个常见的初始值。(我想你的部分评论被删掉了。我想知道是什么。)
function calcTimeDifference(Start,End)
{
  if(Start && End)
  {
    var second=1000;
    var minute=60*second;
    var hour=minute*60;
    var day=hour*24;
    var t1=new Date(Start).valueOf();
    var t2=new Date(End).valueOf();
    var d=t2-t1;
    var days=Math.floor(d/day);
    var hours=Math.floor(d%day/hour);
    var minutes=Math.floor(d%day%hour/minute);
    var seconds=Math.floor(d%day%hour%minute/second);
    return 'dd:hh:mm:ss\n' + days + ':' + hours + ':' + minutes + ':' + seconds;  
  }
  else
  {
    return 'Invalid Inputs';
  }
}