背景日付と時間をフォーマットする必要は非常に一般的であり、ツールベースの変換方法も多数あります。たとえば、2022-3-4 のような日付形式を 2022-03-04 に変換する必要があります。これは、1 桁の月または日の前に自動的に 0 が付加されることを意味します。これも、moment.js や dayjs などのサードパーティライブラリの API を使用すると簡単に実現できます。自分で実装してみましょう。 解決策1アイデア:まず従来のアプローチを見てみましょう。日付 2022-3-4 を例に挙げます。まず、文字列を - に従って分割して配列を取得し、次に 3 や 4 などの 1 桁の日付を識別します。<10 の場合は先頭に 0 を追加します。それ以外の場合は操作は実行されません。 コード:関数formatDate(str) { // - 記号に従って str を分割して返します 。スプリット("-") .map((アイテム) => { // +item は項目文字列を数値に変換します // 10 未満の場合はプレフィックス 0 を追加します (+アイテム < 10) の場合 { "0" + +item を返します。 } // 値が10より大きい場合は0を加算する必要はありません 返品商品; }) .join("-"); // 最後に再組み立てします } // テスト formatDate("2022-03-4"); // 出力 '2022-03-04' 上記のソリューションは、2022-3-4 から 2022-03-04 などの単純な変換にのみ適しています。2022-3-4 1:2:3 などのより複雑な日付形式や日付と時刻の形式は一致しません。 また、ここでは - の形式のみが認識されます。2022/3/4 や 2022.3.4 もあったらどうなるでしょうか? 解決策2アイデア:正規表現の使い方を見てみましょう。正規表現を使用すると、コードが簡素化されるだけでなく、より多くの状況に対応しやすくなります。 私たちの基本的な考え方は、先読みと後読みを使用して日付コネクタの中央にある数字を識別し、その数字に 0 を埋め込む必要があるかどうかを判断することです。書き始める前に、いくつかの正規表現の使い方を理解しておきましょう。 1. 前を見る: (?=)、後ろを見る: (?<=)、 簡単に言えば、 // 先読み: A(?=B) //Bより前にAがあるか検索 // ルックバック: (?<=B)A //Bの後のAを検索 // 否定先読み: A(?!B) // Bが後に続かないAを探す // 否定的なルックバック: (?<!B)A // B が前にない A を検索 ここでは、-、/、などの文字間の数字を識別するためにこれを使用できます。 2. 単語境界: \b
ここでは、日付の先頭または末尾の数字を識別するために使用できます。たとえば、2022-3-4 1:2:5 では、4 の後のギャップ、1 の前のギャップ、5 の後のギャップはすべて単語の境界です。 3. replace メソッドは、一致する文字列 $& を置き換えます。 1 桁の数字を一致させた後は、0 を追加する必要があります。$& は一致した数字を表し、0$& を使用して 0 を追加できます。 コード: // $& を使って一致させます function formatDate(str) { /* replace の最初のパラメータは通常の (?<=\/|-|\.|:|\b)\d{1} は後読みを使用して、/ または - または。または: または T の後の単語境界または数字を検索します\d{1}(?=\/|-|\.|:|\b) は先読みを使用して、/ または - または。または: または T の前の単語境界または数字を検索します。replace の 2 番目のパラメータ "0$&" は、一致した文字列の先頭に 0 を追加します */ str.replace(/(?<=\/|-|\.|:|\b|T)\d{1}(?=\/|-|\.|:|\b|T)/g, "0$&"); を返します。 } // 一致するように $1 を使用します function formatDate(str) { /* replace の最初のパラメータは上記と同じです。2 番目のパラメータは関数です。最初のパラメータは最初に一致したパラメータです。関数内で 0 を処理して埋めることができます。 */ str.replace() を返す /(?<=\/|-|\.|:|\b|T)\d{1}(?=\/|-|\.|:|\b|T)/g, 関数 ($1) { "0" + $1 を返します。 } ); } // テスト formatDate("2022-3-4 1:2:3"); // 出力 '2022-03-04 01:02:03' formatDate("2022/3/4"); // 出力 '2022/03/04' formatDate("2022.3.4"); // 出力 '2022.03.04' formatDate("2020/8/9T1:2:3"); // 出力 '2020/08/09T01:02:03' 要約するここでは通常の文字列変換のみを実行しましたが、これにも欠点があります。
興味のある友人は、このアプリを試してみると、変換方法がさらに充実するでしょう。 参照する
以下もご興味があるかもしれません:
|
<<: スーパーバイザーによるDockerfileのマルチサービスイメージパッケージ操作
1. Oracle は大規模データベースですが、MySQL は小規模から中規模のデータベースです。O...
注: データベースのバージョンの問題により、プロジェクトの起動時にエラーは発生しませんでしたが、デー...
序文:この記事では、Ant Design Proログイン機能にグラフィック検証コードコンポーネントを...
今日、ブラウザの互換性の問題にいくつか遭遇しました。そのうちの 1 つは奇妙に感じました。Firef...
システム環境: Windows 7 1. DockerをインストールするDocker公式サイトからd...
「ウェブサイトを高級感のあるものにするにはどうすればいいでしょうか? それともデザイン重視にすればい...
それは何ですか? Spring Boot は、Spring オープンソース組織のサブプロジェクトであ...
知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...
1. ダウンロード1. MySQL公式サイトのダウンロードアドレス: https://downloa...
目次1. 浅いコピー1. Object.assign(ターゲット、ソース、ソース...) 2. スプ...
前提条件gitをインストールする必要があるインストール手順1. リモートリポジトリからpyenvをク...
序文「画像処理というと、PhotoShop などの画像処理ツールを思い浮かべることが多いです。フロン...
今日はあまり使わないHTMLタグ「subタグ」と「supタグ」を紹介します。関連記事: HTML タ...
情報を探すインターネットで見つかったいくつかの方法: autocomplete="off&...
MySQLでは判定記号がよく使われますが、等しくない記号はもっと一般的に使われます。次の3つの等しく...