如何在此Google Apps脚本中设置日期格式


10

我遇到了这个排名检查脚本。我不确定在哪里找到它,但是它是建立在Google Docs和自动执行排名检查过程的脚本之上的。我了解一些编码,但还不足以真正弄清这一点。我敢肯定,这里有人可以解决。

该脚本每晚运行一次,向Google查询我的关键字,然后在Google Spreadsheet中填充空白单元格。出现的日期格式是15.06.2014 06:08:21

我希望它是我更熟悉的日期格式,例如mm/dd/yyyy或类似的东西。

总之,我已经用脚本涉足(是这样写的?蟒蛇什么语言?),我看到它设置了一个名为变量curDatnew Date()。根据我的理解,Date()是否正在调用一个函数并且没有向其传递任何参数-对吗?Date()函数中的问题吗?或者这仅仅是我必须在Google Spreadsheets中格式化日期的简单情况?

这是整个脚本的粘贴-很简短:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.insertColumnBefore(5);
  var column = sheet.getRange('B13:B');
  var values = column.getValues();
  var rankingdrop = sheet.getRange("c8").getValue();
  var ct = 0;
  var colors = [];
  while ( values[ct][0] != "" ) {
  var formu = sheet.getRange("d" + (ct+13)).getFormula();
    sheet.getRange("d" + (ct+13)).setFormula(formu);
    Utilities.sleep(3000);
  var rank = sheet.getRange("d" + (ct+13)).getValue();
  sheet.getRange("e" + (ct+13)).setValue(rank);
  var oldrank = sheet.getRange("f" + (ct+13)).getValue();
  var colorcell = sheet.getRange("e" + (ct+13));
    if(rank > oldrank){
    colorcell.setFontColor("#ff0000");
  } else if (rank < oldrank){
    colorcell.setFontColor("#088A08");
  }
    if (rank - oldrank >= rankingdrop) {
      var mailalert = true;
    }
    ct++;
  }
  var sendmail = sheet.getRange("c7").getValue();
  if (mailalert == true && sendmail == "yes")  {
    var emailAddress = sheet.getRange("c9").getValue();
    var message = "Ranking alert. Please check your rankings";
    var url = sheet.getRange("c4").getValue();
    var subject = ("Ranking Alert for " + url);
    MailApp.sendEmail(emailAddress, subject, message);
  }
  var curDat = new Date();
  var startOTY = curDat.getFullYear();
  var curValue = Date.parse(curDat);
  var begDat = new Date(startOTY,0,1);
  var begValue = Date.parse(begDat);
  var weekNum = parseInt((curValue - begValue)/604800000)+1;
  sheet.getRange("e12").setValue(curDat);
}

“(这是用什么语言编写的?python?)”它是JavaScript,请参阅developers.google.com/apps-script
Vidar S. Ramdal

Answers:



9

使用setNumberFormat设定日期(或数量)格式为特定的细胞。本示例将今天的日期放入当前工作表的A1中,格式为MM / dd / yyyy:

var cell = SpreadsheetApp.getActiveSheet().getRange(1, 1);
cell.setValue(new Date()).setNumberFormat("MM/dd/yyyy");

使用原因setNumberFormat(并非Utilities.formatDate如Internet上经常建议的那样):

  1. Utilities.formatDate不更改单元格格式;它将其内容转换为文本。如果要在计算中使用日期值,则不希望将其转换为文本。
  2. Utilities.formatDate需要一个来指定时区。如果您输入“ GMT + 1”之类的字样,并且您所在的国家/地区遵守夏令时,则可能会在几个月后出现难以跟踪的错误。使用setNumberFormat,日期值与电子表格中的所有其他日期值保持一致,这取决于其时区设置。

注意2:可以Session.getScriptTimeZone()用作时区参数。
科斯(Kos)

问题是Session.getScriptTimeZone()输出的是长格式(例如America / Denver)而不是“ GMT-7”,因此您必须以某种方式进行转换。
Craig.Pearce

@ Craig.Pearce对,以及“美国/丹佛”是否转换为GMT-7或GMT-6取决于夏令时是否有效,这取决于您所处的状态以及在该状态下通过的法律最近。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.