
時刻周りの用語を正しく使えているか正直自信はないのですが、ISO形式の時刻(UTC)をISO形式の日本時刻に変換するには、単純に9時間を足してあげれば良いだけの話なのでしょうか?
文字列「2014-10-10T04:50:40Z」
↓
文字列「2014-10-10T13:50:40+09:00」
上の文字列を下の文字列に変換したいのですが、この為のJavaScirptのメソッドというのは存在するのでしょうか?
一応、調べてはみたのですが、やはり、ライブラリを使うことになるか、もしくは、上の文字列を一度、UTCの数値に変換して、日本時刻のISO形式文字列を取得するような流れになるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ベストアンサー
おおむねその認識であっています。
今はある程度対応してるかな……と思ったらそうでもなさそうなので、一番はMoment.jsを使うのがよさそうですね。
P.S. (および参考資料)
JavaScript、まだ罠が多いんだな……。
投稿2017/09/13 02:05
総合スコア2244
0
toLocaleString()でローカル時間を取得して
getTimezoneOffset()で得たオフセット分を利用して表示するのが妥当です
sample
どうしても文字列処理が入るのできたないですね
そういう意味でライブラリの利用が推奨されます
javascript
1var str="2014-10-10T04:50:40Z"; 2var d=new Date(str); 3var d2=new Date('1970-01-01 0:00:00'); 4d2.setMinutes(-d.getTimezoneOffset()); 5console.log(d.toLocaleString().replace(/\/(\d)(?!\d)/g,"/0$1").replace(/\//g,"-").replace(/\x20/g,"T").replace(/T(\d):/,"T0$1:")+"+"+d2.toLocaleString().replace(/^.+?\x20(\d{1,2}:\d+).+$/,"$1").replace(/^(.{4})$/,"0$1"));
普通な処理
javascript
1Date.prototype.getMyString=function(){ 2 var str=""; 3 str+=this.getFullYear(); 4 str+="-"; 5 str+=(this.getMonth()+101).toString().substr(-2); 6 str+="-"; 7 str+=(this.getDate()+100).toString().substr(-2); 8 str+="T"; 9 str+=(this.getHours()+100).toString().substr(-2); 10 str+=":"; 11 str+=(this.getMinutes()+100).toString().substr(-2); 12 str+=":"; 13 str+=(this.getSeconds()+100).toString().substr(-2); 14 str+="+"; 15 str+=(Math.floor(-(this.getTimezoneOffset()/60)+100)).toString().substr(-2); 16 str+=":"; 17 str+=(Math.floor(-(this.getTimezoneOffset()%60)+100)).toString().substr(-2); 18 return str; 19} 20var d=new Date("2014-10-10T04:50:40Z"); 21console.log(d.getMyString());
投稿2017/09/13 01:57
編集2017/09/13 09:06総合スコア117719
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。


退会済みユーザー
2017/09/13 02:02

退会済みユーザー
2017/09/13 02:10
2017/09/13 08:59

0
ISO 8601 拡張形式
...この為のJavaScirptのメソッドというのは存在するのでしょうか?
少なくとも、ES2017にネイティブ関数はなく、自分で実装するしかなさそうなので、作ってみました。
- toISOLocalString(): 現在のロケールに対応した「ISO 8601 拡張形式」の日付文字列を返します - Gist
- String.prototype.padStart, String.prototype.padEnd の Polyfill (ECMAScript 2017 / ECMA-262 8th edition) - Gist
JavaScript
1console.log(toISOLocalString(new Date('2014-10-10T04:50:40Z'))); // "2014-10-10T13:50:40.000+09:00"
単純に9時間を足してあげれば良いだけの話なのでしょうか?
そういう考え方もありますが、getFullYear
, getMonth
, getDate
...etc は、現在のロケールに対応した数値を返す仕様なので、一度、date オブジェクトに変換すれば、楽に出力できると思います。
省略記法
文字列「2014-10-10T13:50:40+09:00」
ミリ秒が省略されているようですが、省略形式にする場合は、String#replace
で置換するか、コードを書き換えるかして下さい。
new Date
に投げる形式をとるなら、現行仕様で問題はないはずです。
日本時刻に変換する目的
文字列「2014-10-10T04:50:40Z」
↓
文字列「2014-10-10T13:50:40+09:00」
どちらも、new Date
に投げれば、同じ日付オブジェクトになるので、通常利用ではどちらでも問題がありません。
「どういう目的で変換したいのか」は明らかにすると、別の切り口から解決手段が見えてくるかもしれません。
JavaScript
1console.log(new Date('2014-10-10T04:50:40Z')); // Fri Oct 10 2014 13:50:40 GMT+0900 (東京 (標準時)) 2console.log(new Date('2014-10-10T13:50:40+09:00')); // Fri Oct 10 2014 13:50:40 GMT+0900 (東京 (標準時))
Re: hayatomo さん
投稿2017/09/13 08:33
編集2017/09/13 16:50総合スコア18194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/09/13 02:10
2017/09/13 06:58