haiju's 開発メモ

開発に必要な情報を自分用にメモ

JavaScriptで文字列の中の数字(ID)を正規表現でチェック後に取り出す

JavaScriptBOTスクリプトを開発していて、ユーザーが

誤って登録したtodoを、「del ID」形式で手動削除する場合

に考えて実装してみたことを備忘録としてまとめる(ΦωΦ)

[手順]

1.手動で削除するコマンドを正規表現を使用して実装。

if (text.match(/DEL\s([0-9]+$/i)) {

2.1で与えたID部分のみを取得。

var result = text.match(/DEL\s([0-9]+$/i);

console.log(result[1]); --- delコマンド実行で指定したIDが出力される

3.削除機能の関数に2で取り出したIDを付与。

deleteTodo(result[1]);

[参考サイト]

javascript.programmer-reference.com

www.webprofessional.jp

JavaScript 正規表現で文字列を検索する(match) |

cya.sakura.ne.jp

JavaScriptで文字列の分割と切り出しについて

JavaScriptPHPを行ったり来たりしてると、どっちが

どっちか分からなくなるため、文字列の切り出し方法に

ついてメモしておく(ΦωΦ)

[手順]

1.sliceを使って文字列を切り出す。

[書式]

var str = 文字列;

str.slice(開始位置, 終了位置);

(ex)先頭から4文字目までを切り出し

var str = 'user-123';

// 0~4文字目までの範囲を指定

var result = str.slice(0,4);

console.log(result);

※「user」が表示されればOK。

(ex)マイナス値で指定

var str = 'user-123';

var result = (-2,4);

console.log(result);

※sliceの場合はマイナス値で指定すると、無条件に0に置換。

※よって、結果は上記と同様「user」になる。

2.substrを使って文字列を切り出す。

[書式]

var str = 文字列;

str.substr(開始位置,文字数);

(ex)先頭から4文字目までを切り出し

var str = 'user-123';

var result = str.substr(0,4);

console.log(result);

※結果

「user」が表示されればOK。

(ex)文字数を省略

var str = 'user-123';

var result = str.substr(5);

console.log(result);

開始位置から末尾まで全対象になるので「123」が表示。

(ex)マイナス値で指定

var str = 'user-123';

var result = str.substr(-3):

console.log(result);

※開始位置にマイナス値を指定すると、全体の文字数から開始位置

 を引いた数になるので「123」が表示。

3.substringを使って文字列を切り出す。

 [書式]

var str = 文字列;

str.substring(開始位置, 終了位置);

(ex)先頭から4文字目までを切り出し

var str = 'user-123';

var result = str.substring(0, 4);

console.log(result);

※結果

「user」が表示されていればOK。

(ex)マイナス値を指定

var str = 'user-123';

var result = str.substring(-2, 4);

console.log(result);

開始位置のマイナス値は無条件に0に置換されるため、

 「0,4」と同じ意味になる。

※よって、結果は「user」になる。

(ex)終了位置より開始位置の数字が大きい

var str = 'user-123';

var result = str.substring(4,0);

console.log(result);

開始位置の数字が終了位置より大の場合は、自動的に反転

 して変更されるため、「0,4」と同じ意味になる。

※よって、結果は「user」になる。

[参考サイト]

catprogram.hatenablog.com

www.sejuku.net

JavaScriptで日付を0埋めで2桁で取得するには

後から後からユーザーから追加される機能を実装してて

日付を0埋めの2桁ずつで取得しておいたほうが処理が

実装しやすいことに気づいたので、0埋めの方法を

メモしておく(ΦωΦ)

[手順]

1.月の先頭に”0”を付けてから2桁に直す。

var month = ("0"+(date.getMonth() + 1)).slice(-2);

2.日の先頭に"0"を付けてから2桁に直す。

var day = ("0"+date.getDate()).slice(-2); 

[参考サイト]

algorithm.joho.info

www.digitra.net

iwb.jp

qiita.com

www.sejuku.net

JavaScriptでゼロパディングして桁をそろえる方法

テスト用にCentOS6.5の日付をずらす

以前、CentOS7.xでテスト用に日付をずらす場合はメモした。

今回、使用するのはCentOS6.5なため、同様に調べてみた。

[手順]

1. MMDDhhmm形式で設定。

[書式]

date [-u | --utc | --universal] [MMDDhhmm[[CC]YY][.ss]]

[意味]

MM --- 月

DD --- 日

hh --- 時

mm --- 分

CC --- 年の最初2文字(省略可能)

YY --- 年の最後2文字(省略可能)

ss --- 秒(省略可能)

UTCを設定する場合は[-u | --utc | --universal]オプションのいずれかを

 選択して使用。

[使い方]

(ex)2017年5月30日 18:00に設定

# date 053018002017

2017年 5月30日 火曜日 18:00:00 JST

※年を指定する場合の順番に注意が必要。

2. -sまたは--setオプションを指定して設定。

 一般的な日時・時刻表記を使用して設定を行える。

[書式]

date [-s | --set] 年月日表示

(ex)2017年5月30日 18:00 に設定

# date --set "2017-05-30 18:00:00"

# date --set "2017/05/30 18:00:00"

# date --set "05/30 18:00:00 2017"

2017年 5月30日 火曜日 18:00:00 JST

※時刻を指定せずに日時を設定した場合、時刻が00:00:00に設定されてしまう

 ことに注意。

[参考サイト]

www.server-memo.net

"date" 日付・時刻の設定 その2 @LCD -Linux Command Dictionary-|Replog!株式会社レップワンスタッフによるブログです

www.torutk.com

hacknote.jp

qiita.com

www.ice-military.com

PHPで扱える日付とその使い方について

並行してNode.js+BOTスクリプトを開発しているため、

なかなかPHPに頭が切り替わらなくて日付の扱い方というか

date()関数を使うのは覚えてたけど、今日を起点に何日後(前)を

算出する方法や日付文字列と日付の比較をする場合の取り扱い

が思い出せなかったwww(ΦωΦ;)

まとめは今の作業後に行うので、とりあえず参考リンク

先だけメモしておく。

ちなみに、使用しているPHPバージョンは5.1.x。

[使い方]

(ex)csvファイルを読み込んで配列に取得した日付文字列を、0埋めの日付にformat

$target_date = (date('Y/m/d', strtotime($arr_val["date"])));

(ex)当日日付を「/」でformat

$today = date('Y/m/d');

(ex)当日から7日後の日付

$sevenDaysAfter = date('Y/m/d', strtotime('+1 week'));

$sevenDaysAfter = date('Y/m/d', strtotime('+7 days'));

$sevenDaysAfter = date('Y/m/d', mktime(0,0,0, date('m'), date('d') + 7, date('Y)));

[参考サイト]

PHP: date - Manual

eng-entrance.com

jobtech.jp

www.sejuku.net

phpのstrtotime関数を使って文字列を日付型に整形する « kawama.jp

www.flatflag.nir87.com

tetechi.com

qiita.com

qiita.com

qiita.com

php.o0o0.jp

ysklog.net

 

 

JavaScriptの配列と連想配列とオブジェクトについて

自分の中で、JavaScriptの配列とオブジェクトがよく

分かってなかったので、今後、混乱しないためにも

要点をまとめてみた分をメモしておく(ΦωΦ)

[メモ]

JavaScript連想配列はオブジェクトの一種。

JavaScriptではJSONもオブジェクトの一種。

JavaScriptでは、すべてのオブジェクトは連想配列

・配列の初期化は「[ ]」、連想配列の初期化は「{}」

 ※但し、連想配列の添字にも「[ ]」を使う。下記参照。

連想配列の書式

var array = {key: value, key: value ... } 

valueには、文字列、数値、関数、オブジェクトを設定可能

連想配列で要素を追加する場合、pushは利用不可。

連想配列の要素追加方法

(ex)ユーザー情報にkey=countryで国情報を追加

var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};

(1)チェーンで追加

user.country = 'Japan';

-> ドット(.)で設定したキー名称を繋げて値を追加。

(2)添字で追加

user['country'] = 'Japan';

-> 配列のように[]を使用し、キー名称を指定して値を追加。

連想配列の要素削除方法

(ex)書式

delete array[key]

(ex)下記の連想配列からkey=bananaを削除

var arr = {apple: '400yen', banana: '300yen', cake: '600yen'};

delete arr['banana'];

console(arr);

※要素削除後の連想配列の中身

Object{apple: '400yen', cake: '600yen'}

連想配列の値を取得

(ex)下記の連想配列からkey=nameを取得

var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};

※添字を使用

console.log(user['name']);

※ドット(.)を使用

console.log(user.name);

連想配列のキー項目の取得方法

 簡単な方法はObject.keysを使用。

(ex)書式

Object.keys(args=連想配列)

(ex)下記連想配列のキー項目を取得

var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};

var key = Object.keys(user);

console.log(key);

※実行結果

name,age,telが返却

※配列のように、key[1]で取得も可能

連想配列のforループ

 ・for...inでループ処理

  少ない記述で効率よくkeyやvalueを取得・設定可能。

(ex)書式

for (var 変数 in 連想配列) {}

(ex)下記連想配列からkey項目を取得

var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};

for (var key in user) {

      console.log(key);

}

※実行結果

name

age

tel

 ・forEachでループ処理

  連想配列で使用する場合、Object.keys()を使用し、連想配列

  キー名称(key)だけを一時的に配列へ格納。

(ex)書式

Object.keys(①連想配列).forEach(②callback,③連想配列)

連想配列のキー名称を配列化

②ループ処理、無名関数

③ループ処理内のthisが連想配列を指す

(ex)下記連想配列からkeyとvalueを取得

var arr = {apple: '400yen', banana: '300yen', cake: '600yen'};

①Object.keys(arr).forEach(function (②value) {

       console.log(value + ':' + this[value]);

}, ③arr);

連想配列を配列に変換

②forEachの実行で、valueにkeys(key項目)が格納

③第2引数に連想配列のarrを指定 -> ループ処理内のthisとイコール

※this[value]で連想配列の値を取得可能

※実行結果

apple: 400yen

banana: 300yen

cake: 600yen

連想配列のソート

 ・連想配列のkeyを使用したソート

(ex)キーを取得

var user = {name: 'Taro', age: 32, tel: '080-1234-5678'};

①var result = {};

②var key = Object.keys(user);

key.sort();
①ソート後の連想配列を格納する変数

連想配列を配列データとして格納  

(ex)ソートした順番で変数「result」に連想配列を格納

for(var i=0; i<key.length; i++) {

     ①result[key[i]] = user[key[i]];

}

console.log(result);

①元になる連想配列「user」と新規作成する「result」の

それぞれの添字をソート後の変数「key」に統一

※実行結果

{'age': 32, 'name': 'Taro', tel: '080-1234-5678'}

・複数の連想配列をソート

(ex)配列内の複数の連想配列が存在

var fruits = [

      {store: 'first-shop', apple: '400yen', banana: '300yen', cake: '400yen'},

      {store: 'second-shop', apple: '200yen', banana: '400yen', cake: '600yen'},

      {store: 'third-shop', apple: '600yen', banana: '500yen', cake: '200yen'},

];

(ex)各店舗のappleの価格を比較して安い価格順にソート

①fruits.sort(function(a, b) {

     ②return a.apple < b.apple ? -1 : 1;

});

console.log(fruits);

※実行結果

0: {store: 'second-shop', apple: '200yen', banana: '400yen', cake: '600yen'}

1: {store: 'first-shop', apple: '400yen', banana: '300yen', cake: '400yen'}

2: {store: 'third-shop', apple: '600yen', banana: '500yen', cake: '200yen'}

①sort()で関数を利用し、それぞれの連想配列にある「apple」の価格を比較

②引数a,bには順番に連想配列を格納。

=>a.apple: 0番目のappleの値、b.apple: 1番目の値

それぞれの値を比較し、0より小は-1, 0より大は1を返却

[参考サイト]

www.sejuku.net

qiita.com

qiita.com

www.amelt.net

Javascriptって2次元の連想配列できないの? « ウップス!!なかわけ

qiita.com

qiita.com

JavaScriptによる多次元連想配列 multidimensional-array associative-array | コードサンプル [日本語]

 

Node.jsでMySQLから日付を取り出したらdatetime形式じゃなかったので、変換する関数つくった

BOTスクリプトを実装していて、MySQLに登録した

日付を出力する必要があったので、取得した内容を

検証用に出力してみたら、datetime形式ではなく、

なんじゃこりゃー!!!(ΦωΦ;)

って内容に自動変換されてたw

ちなみに、こんな感じw

(ex)2018/08/20 17:00:00

Mon Aug 20 2018 17:00:00 GMT+0900 (JST)

INSERTやUPDATE時は問題ないのに、SELECTして

内容を出力すると自動変換される?らしい。

JSONを経由すると自動変換されるらしいという情報も

見たw ただでさえ配列で気持ち悪くなってるのに!

勝手なことしてんじゃねー!!!

って思ったので、まず実行前に参考サイトをメモってみる。

実装後に手順については更新予定。

普通に、スペースで文字列を切り出して「yyyy/mm/dd hh:mm:ss」

にフォーマットする関数を作って対応したw(ΦωΦ)

[手順]

1. splitでISO形式に変換された日付を正規表現を使用しspaceで分割。

var separatorString = /\s/;

var arrString = strDate.split(separatorString);

2. 切り出したmonthを0埋めの数字に変換。

(ex)'Aug' -> '08'

3. formatを「yyyy/mm/dd hh:mm:ss」にして値を返却するように実装。

var ret = arrString[3] + '/' + arrString[1] + '/' + arrString[2] + ' ' + arrString[4];

[参考サイト]

tetechi.com

zukucode.com

iwb.jp

www.sejuku.net

qiita.com

qiita.com

teratail.com

kuroeveryday.blogspot.com

qiita.com

www.sejuku.net

uxmilk.jp

programming-study.com

www.recipi.jp