背景日付と時間をフォーマットする必要は非常に一般的であり、ツールベースの変換方法も多数あります。たとえば、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. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...
この記事では、主にリスト構造を使用して水平ナビゲーション構造を設定する 2 つの方法を紹介します。こ...
最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...
MySQL で遅い SQL ステートメントを見つけるにはどうすればよいでしょうか?これは、多くの人を...
1. VMwareのダウンロードとインストールリンク: https://www.jb51.net/s...
目次導入従来のトランジションアニメーションCSS トランジションアニメーションjsアニメーション従来...
前回の記事では、Docker を使用して Laravel アプリケーションをデプロイする方法について...
目次ファーストルックインデックスインデックスの概念インデックスファイルの構成インデックスの役割SQL...
MYSQLバージョン:MySQL Community Server 5.7.17、インストール不要版...
セキュリティ上の理由から、Alibaba Cloud Server ECS にはデフォルトで独自のセ...
目次1. 本来の定義2. JS操作、幅の変更を例に3. 効果: 幅が変更されました 1. 本来の定義...
この記事の例では、Vue の日付時刻ピッカーコンポーネントの具体的なコードを参考までに紹介します。具...
ローカルEclipse上にTomcatサーバーを作成する場合、 tomcaインストールディレクトリの...
目次1. 問題2. 解決策オプション1:オプション2: 1. 問題この話は、エラーと脱落率を照会する...
この例では、Linux への Python 3.8 のインストールを例に挙げます。 1. 依存パッケ...