Angular PR

【Angular】日付フォーマット入門!テンプレートとコンポーネントでの使い分け

記事内に商品プロモーションを含む場合があります

こんにちは!

Angularでアプリケーションを開発していると、サーバーから受け取った日付データやユーザーが入力した日付を、見やすいフォーマットで表示したい場面がよくあります。

Angularで日付のフォーマットってどうやるんだろう?
2025/01/232025年1月23日 みたいに表示形式を変えたいな。
テンプレートだけじゃなくて、TypeScriptのコードの中でも日付を整形したい!

Angularでの日付の扱いや表示について、このような疑問をお持ちではないでしょうか。

この記事では、Angularに標準で備わっている便利な機能「DatePipe」を使って、日付データを様々な書式の文字列に変換する方法を、基本から分かりやすく解説します。

この記事は次のような方におすすめです。

この記事はこんな人におすすめ!
  • Angularで日付の表示形式を整えたい方
  • DatePipeの基本的な使い方を知りたい方
  • テンプレートとコンポーネントの両方で日付をフォーマットしたい方
  • AngularアプリケーションのUIを分かりやすく改善したい方
  • Angularの標準パイプ機能に興味がある方

この記事を読めば、DatePipeの仕組みが理解でき、実際のプロジェクトですぐに活用できるスキルが身につきます。Angularの日付フォーマットをマスターして、よりユーザーフレンドリーなアプリケーションを開発しましょう。

「日付の表示で困っている方」「Angularの基本機能をしっかり押さえたい方」は、ぜひ参考にしてください。

それでは、順を追って詳しく見ていきましょう!

Angularの日付フォーマットの基本「DatePipe」

Angularには、テキストや数値、日付などをテンプレート内で簡単に変換・整形するための「パイプ(Pipe)」という機能が備わっています。

その中でも、日付のフォーマットを担当するのが DatePipe です。DatePipe を使うことで、Dateオブジェクトや日付形式の文字列、タイムスタンプ(数値)などを、指定した書式の読みやすい文字列に変換できます。

DatePipe はAngularに標準で組み込まれているため、特別なライブラリをインストールすることなく、すぐに利用を始められるのが大きな魅力です。

DatePipeの基本的な使い方(テンプレート編)

最も簡単で一般的な使い方は、コンポーネントのHTMLテンプレート内でパイプ演算子 | と共に date キーワードを使用する方法です。

まずは、コンポーネント側に表示したい日付データを用意します。

近年のAngularでは、コンポーネントを単体で動作させる「スタンドアロンコンポーネント」が主流になっています。テンプレートでDatePipedateパイプ)を利用するには、コンポーネントにDatePipeをインポートしましょう。

以下は、スタンドアロンコンポーネントでの設定例です。

// app.component.ts
import { Component } from '@angular/core';
import { DatePipe } from '@angular/common'; // DatePipeをインポート

@Component({
  selector: 'app-root',
  standalone: true, // スタンドアロンコンポーネントとして宣言
  imports: [DatePipe], // テンプレートでDatePipeを使えるようにインポート
  templateUrl: './app.component.html',
})
export class AppComponent {
  // 現在の日付を格納するプロパティ
  today = new Date();
}

次に、テンプレート側でこの today プロパティを date パイプに渡します。

<!-- app.component.html -->

<h1>DatePipeの基本的な使い方</h1>

<p>フォーマットなし: {{ today }}</p>

<p>DatePipeを適用: {{ today | date }}</p>

これだけで、ブラウザの言語設定に応じたデフォルトの形式で日付が表示されます。例えば、日本の環境であれば「2025/09/23」のような形式になります。

フォーマットを指定する方法

DatePipe の真価は、表示するフォーマットを自由自在にカスタマイズできる点にあります。フォーマットを指定するには、dateの後ろにコロン : をつけ、続けてフォーマット文字列を記述します。

<!-- app.component.html -->

<p>年月日をスラッシュ区切りで表示します: {{ today | date:'yyyy/MM/dd' }}</p>

<p>年月日を漢字で表示します: {{ today | date:'yyyy年MM月dd日' }}</p>

<p>時刻も一緒に表示します: {{ today | date:'yyyy/MM/dd HH:mm:ss' }}</p>

このように、テンプレート内で直感的に日付の表示形式をコントロールできます。

主なフォーマット文字

フォーマット文字列として使用できる文字には、さまざまな種類があります。ここでは、よく使われる代表的なものを紹介します。

文字 説明 例 (2025年1月2日 木曜日 午前3時4分5秒 の場合)
y 2025
yy 年(2桁) 25
yyyy 年(4桁) 2025
M 1
MM 月(2桁、0埋め) 01
MMM 月(省略名) Jan
MMMM 月(フルネーム) January
d 2
dd 日(2桁、0埋め) 02
E 曜日(省略名) Thu
EEEE 曜日(フルネーム) Thursday
H 時(0-23)午前 3(午後の場合 15
HH 時(0-23、2桁、0埋め) 03
h 時(1-12) 3
hh 時(1-12、2桁、0埋め) 03
m 4
mm 分(2桁、0埋め) 04
s 5
ss 秒(2桁、0埋め) 05
a 午前/午後 AM

これらの文字を組み合わせることで、要件に応じた柔軟な日付フォーマットが実現できます。

定義済みフォーマットを使う

毎回フォーマット文字列を記述するのが面倒な場合や、アプリケーション内で日付形式を統一したい場合には、Angularが事前に用意している「定義済みフォーマット」を利用するのが便利です。

'short''medium''long''full' といったキーワードを指定するだけで、決められた形式で日付を表示できます。

<!-- app.component.html -->

<h1>定義済みフォーマット</h1>

<p>short: {{ today | date:'short' }}</p>
<p>medium: {{ today | date:'medium' }}</p>
<p>long: {{ today | date:'long' }}</p>
<p>full: {{ today | date:'full' }}</p>

<hr>

<p>shortDate: {{ today | date:'shortDate' }}</p>
<p>mediumDate: {{ today | date:'mediumDate' }}</p>
<p>longDate: {{ today | date:'longDate' }}</p>
<p>fullDate: {{ today | date:'fullDate' }}</p>

これらの出力結果はロケール(言語設定)によって異なり、英語環境では以下のようになります。

  • short: 1/2/25, 3:04 AM
  • medium: Jan 2, 2025, 3:04:05 AM
  • long: January 2, 2025 at 3:04:05 AM GMT+9
  • full: Thursday, January 2, 2025 at 3:04:05 AM GMT+09:00

shortDate のように Date を付けたキーワードは、時刻を含まない日付のみのフォーマットです。

DatePipeの使い方(コンポーネント編)

場合によっては、HTMLテンプレートの中ではなく、TypeScriptのコード(コンポーネントクラス)内で日付をフォーマットしたいこともあるでしょう。例えば、整形した日付文字列をサーバーに送信したり、別のメソッドに渡したりするケースです。

その場合は、DatePipe をコンポーネントに「DI(Dependency Injection)」して利用します。

まず、コンポーネントの providers 配列に DatePipe を登録します。(スタンドアロンコンポーネントの場合は imports 配列に DatePipe を追加します)

そして、コンストラクタの引数に DatePipe を定義することで、クラス内で DatePipe のインスタンスが使えるようになります。

// app.component.ts
import { Component } from '@angular/core';
import { DatePipe } from '@angular/common';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  // DatePipeをDIするためにprovidersに登録
  providers: [DatePipe]
})
export class AppComponent {
  today = new Date();
  formattedDate: string | null;

  // コンストラクタでDatePipeを注入
  constructor(private datePipe: DatePipe) {
    // transformメソッドを使って日付をフォーマット
    this.formattedDate = this.datePipe.transform(this.today, 'yyyy-MM-dd');
  }

  logCurrentTime() {
    const time = this.datePipe.transform(new Date(), 'HH:mm:ss');
    console.log(`現在の時刻は ${time} です。`);
  }
}

DatePipetransform メソッドが、実際に変換処理を行うメソッドです。第1引数に変換したい日付データ、第2引数にフォーマット文字列を渡します。

このように、コンポーネントクラス内でも DatePipe を利用することで、テンプレートと同じルールで日付を整形できます。

タイムゾーンと言語(ロケール)の指定

DatePipe は、フォーマット文字列に加えて、タイムゾーンやロケール(言語)を指定するパラメータも受け取ることができます。

transform メソッドのシグネチャは以下のようになっています。

transform(value: any, format?: string, timezone?: string, locale?: string): string | null

テンプレートで使う場合は、パイプにコロン : で区切ってパラメータを渡します。

<!-- app.component.html -->

<h1>タイムゾーンとロケールの指定</h1>

<!-- タイムゾーンをUTC(協定世界時)に指定 -->
<p>UTC時刻: {{ today | date:'yyyy/MM/dd HH:mm:ss':'UTC' }}</p>

<!-- ロケールをフランス語に指定 -->
<p>フランス語 (fullDate): {{ today | date:'fullDate':'':'fr' }}</p>

<!--
ロケールを使用する場合は、コンポーネント側で使用するロケールをregisterLocaleDataで登録する必要があります。

例)
import { registerLocaleData } from '@angular/common';
import localeFr from '@angular/common/locales/fr';

registerLocaleData(localeFr);
-->

コンポーネントで使う場合も同様です。

import { DatePipe } from '@angular/common';
import { Component } from '@angular/core';
import { registerLocaleData } from '@angular/common';
import localeJa from '@angular/common/locales/ja';

registerLocaleData(localeJa);

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  providers: [DatePipe],
})
export class AppComponent {
  // 現在の日付を格納するプロパティ
  today = new Date();

  // コンポーネント内での例
  constructor(private datePipe: DatePipe) {
    // タイムゾーンをアメリカ/ニューヨーク時間に指定
    const nyTime = this.datePipe.transform(
      this.today,
      'medium',
      'America/New_York'
    );
    console.log(nyTime);

    // ロケールを日本語に指定して元号で表示
    // Angularで日本の元号を扱うには、別途ロケールデータの登録が必要になる場合があります。
    const wareki = this.datePipe.transform(
      this.today,
      'GGGGy年MM月dd日',
      '',
      'ja-JP-u-ca-japanese'
    );
    console.log(wareki);
  }
}

タイムゾーンやロケールを扱うことで、国際的なアプリケーションにも対応できるようになります。

キャリア形成/給与還元
ひとつひとつ真摯に向き合う企業
ONE_WEDGE社員募集

株式会社 ONE WEDGEでは、新たな仲間を募集しています!

私たちと一緒に、革新的で充実したキャリアを築きませんか?
当社は、従業員が仕事と私生活のバランスを大切にできるよう、充実した福利厚生を整えています。

  • 完全週休2日制(土日休み)で、祝日や夏季休暇、年末年始休暇もしっかり保証!
  • 様々な休暇制度(有給、慶弔、産前・産後、育児、バースデー休暇、有給6日取得で特別休暇付与)を完備!
  • 従業員の成長と健康を支援するための表彰制度、資格取得支援、健康促進手当など!
  • 生活を支えるテレワーク手当、記事寄稿手当、結婚祝金・出産祝金など、様々な手当を提供!
  • 自己啓発としての書籍購入制度や、メンバー間のコミュニケーションを深める交流費補助!
  • 成果に応じた決算賞与や、リファラル採用手当、AI手当など、頑張りをしっかり評価!
  • ワークライフバランスを重視し、副業もOK!

株式会社 ONE WEDGEでは、一人ひとりの従業員が自己実現できる環境を大切にしています。
共に成長し、刺激を与え合える仲間をお待ちしております。
あなたの能力と熱意を、ぜひ当社で発揮してください。
ご応募お待ちしております!

ホームページ、採用情報は下記ボタンからご確認ください!

応募、ご質問など、お問い合わせフォーム、またはX (旧Twitter)、InstagramのDMでお気軽にご相談ください♪

まとめ

Angularの DatePipe を使うことで、日付のフォーマットを簡単かつ柔軟に行うことができます。

  • テンプレートで手軽に使う場合は {{ aDate | date:'yyyy/MM/dd' }} のように記述します。
  • TypeScriptコード内で使う場合は、DatePipe をDIして transform メソッドを呼び出します。
  • yyyyMM などのフォーマット文字を組み合わせて、自由な書式を作成できます。
  • 'medium''shortDate' といった定義済みフォーマットも利用可能です。
  • タイムゾーンやロケールを指定することで、より高度なフォーマットにも対応できます。

日付の表示は、多くのアプリケーションで必要とされる基本的な機能です。DatePipe を使いこなして、見やすく分かりやすいUIを実現しましょう。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です