

下のスクリプトの改善方法を教えてください。

日付の表記を、`11/12/2017`のように`mmddyyyy`表記にしたいのですが、どうしても`Nov 12`という表記になってしまいます。直せますか？

[code]

    function getWeatherData() {
    // シート設定
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sh = ss.getSheetByName("シート2");
    var lr = sh.getLastRow();
    // 
    var url = "https://weather.com/weather/monthly/l/USCA9009:1:US";
    var response = UrlFetchApp.fetch(url, {muteHttpExceptions:true});
    if (response.getResponseCode() != 200) {
    return;
    }
    
    var body = response.getContentText();
    // 日付
    var regExp = /<th class="col-labels record-date"><strong><span>.*?<\/span><\/strong><\/th>/g;
    var elems = body.match(regExp);
    var date = elems[0].split(">")[3].split("<")[0];
    // 最高気温
    var regExp2 = /<h3>Record High<\/h3><span class="">.*?<\/sup>/g; // 最高気温
    var elems2 = body.match(regExp2);
    var high = elems2[0].split(">")[3].slice(0,-4);
    // 最低気温
    var regExp3 = /<h3>Record Low<\/h3><span class="">.*?<\/sup>/g; // 最低気温
    var elems3 = body.match(regExp3);
    var low = elems3[0].split(">")[3].slice(0,-4);
    // 転記
    sh.getRange(lr+1,1,1,3).setValues([[date,high,low]]);
    }
    
[/code]


CC BY-SA 3.0
2017-11-13T05:47:44.250
39538
2020-06-28T06:00:55.100
2017-11-13T07:29:59.313
3060
26170
question
javascript google-spreadsheet
表に出す日付の表記方法


"<https://weather.com/weather/monthly/l/USCA9009:1:US>"にアクセスしてみると、HTMLソースの中で正規表現にマッチする箇所は、"
**Nov 13** "だけです(日本の日付で2017/11/14時点）。

この文字列の中で、"11/13/2017"というようなyyyymmddの文字列を使えるのは"13"だけです。  
月を表す11は、Novが英語の１１月(November)の略称であるという情報から導き出す必要がありますし、年を表す2017はページにアクセスした時のアメリカ時間の年月日から算出する必要があります。

質問に書かれたコードを修正するのであれば、  
「月」  
・英語の月の略称と月(数字)の対応表(連想配列)を準備する。

[code]

    var monthHash = {Jan:01, Feb:02, ...  ,Dec:12}
    
[/code]

・正規表現でelemに"Nov
13"のような日付（月日）が入るので、先頭の３文字を取り出して、上記の対応表を使うと月(数字)が得られる。(substring(0,2)で１文字目から３文字目の３文字が取り出せる）

[code]

    var mm = monthHash(elem.substring(0,3))
    
[/code]

「日」  
・elemの５文字目と６文字目を取り出せば、日が得られる。

[code]

    var dd = elem.substring(4,6)
    
[/code]

「年」  
・今の日付を得て、その中から年を取り出せば良い。

[code]

    var now = new Date();
    var yyyy = now.getFullYear();
    
[/code]

ここまでで、mm, dd, yyyy に 11, 13, 2017がそれぞれ入るので、あとは好きなように表示するだけです。  
上記のコード片を参考にして、やってみてください。


CC BY-SA 3.0
2017-11-14T08:23:04.320
39567
2017-11-14T08:23:04.320
217
39538
answer