BLOG

ブログ

programming

「Moment.js」を使ってWordPressのRSSから取得した日付を整える方法

こんにちは、ティウェブ藤園です。

今回は、日付処理を簡単にしてくれるMoment.jsと、それを使ってWordPressのRSSから取得した日付を整える方法についてお話します。

(追記)Moment.jsは現在非推奨となりました。
Moment.jsの公式サイトにて代替のJSライブラリのご紹介がありますのでそちらを参照ください。

Moment.js

Moment.jsは、独自に実装するにはいろいろと面倒な日付に関する処理を、ざっくりと簡単にしてくれるJavaScriptのライブラリです。

▼公式ドキュメント
https://momentjs.com/docs/

使い方

まずはCDNからライブラリを読み込みます。

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>

「月曜日」など日本語表現を使いたい場合は、ロケール(locale)設定のファイルも読み込む必要があります。

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/locale/ja.js"></script>

その後、必要な処理を記述していきます。

単純に日付を表示することはもちろんですが、年月だけ、曜日だけなどの、部分的な取得だったり、「2020/05/31」を「2020年5月31日」と表示方法の変換をすることも可能です。

また、日付の足し算や引き算などの計算2つの日付の比較などもできるので、例えばイベントのWebサイトなどで、当日までのカウントダウンといったことにも利用できます。

実用例

では実用例として、表題に挙げた「WordPressのRSSから取得した日付を整える方法」について説明します。

WordPressのRSSは、日付を下記のような形で吐き出しています。

Sun, 31 Mar 2020 12:00:00 +0000

これを「2020年05月31日」と表示させたい場合、日付の表示をカスタマイズしていく必要がありますが、Moment.jsを使うとこのカスタマイズがとても簡単に行えます。

RSSの読み込み

まず、RSSを読み込みます。

基本的に読み込み方はすべて以前のXMLの記事と同様の方法で行います。

※合わせて、Moment.jsのfalls back error対応に対応するための記述も追加しておきます。
RSSから取得した日付のフォーマットがMoment.jsのデフォルトと異なり、警告が表示されてしまうので、フォーマットのチェックをパスするための記述です。

<script>
	$(window).on('load', function() {
		// falls back error対応
		moment.createFromInputFallback = function(config) {
			config._d = new Date(config._i);
		};

		// RSS取得
		$.ajax({
			url: 'RSSのURL',
			type: "GET",
			dataType: 'xml',
			timeout: 3000,
			success: function(data){
				var item = $('item', data);
				for( var i = 0; i < 3; i++ ) {
					var itemDate = $('pubDate', item[i]).text();
					console.log(itemDate);
				}
			}
		});
	});
</script>

上記で、RSSが取得され、最新の記事の3件までの日付がコンソールに表示されます。

これをMoment.jsで整えます。

日付のカスタマイズ

Moment.jsの処理を1行追加するだけで日付表示のカスタマイズができます。

<script>
	$(window).on('load', function() {
		// falls back error対応
		moment.createFromInputFallback = function(config) {
			config._d = new Date(config._i);
		};

		// RSS取得
		$.ajax({
			url: 'RSSのURL',
			type: "GET",
			dataType: 'xml',
			timeout: 3000,
			success: function(data){
				var item = $('item', data);
				for( var i = 0; i < 3; i++ ) {
					var itemDate = $('pubDate', item[i]).text();
					var itemDate = moment(itemDate).format('YYYY年MM月DD日'); // Moment.jsの処理
					console.log(itemDate);
				}
			}
		});
	});
</script>

これで、日付の表示が「YYYY年MM月DD日」というフォーマットに整えられたので、Webサイトで使用しやすくなりました。

JavaScriptのDateクラスで独自実装するとなると面倒な日付の処理が、たったこれだけで実現できます。

まとめ

こういった機能はプラグインで実現できるものもありますが、WordPressのプラグインの記事でデメリットとして書いたように、不要な機能が付随していることもあって、導入の見極めが難しいです。

今回のように限定的な機能が欲しいケースでは、ご紹介したMoment.jsのような軽量なライブラリを使用すると、独自に実装するよりメンテナンスがしやすくなったり、他のコンテンツでも流用できたりといったメリットが得られます

もちろんライブラリの導入にも注意すべき点はありますが、ひとつの選択肢として検討してみてはいかがでしょうか。

ライブラリに限らず、Webサイトへの新しい機能の導入などでお困りごとがありましたら、ティウェブまでお気軽にご相談ください。