私のWebページでHTML5要素を使用しています。デフォルトでは、入力type="date"
は日付をとして示しますYYYY-MM-DD
。
問題は、その形式を次のように変更できるDD-MM-YYYY
かどうかです。
dd/mm/yyyy
ます。モーメントやjQuery datepickerなどの別のライブラリを使用するだけ
私のWebページでHTML5要素を使用しています。デフォルトでは、入力type="date"
は日付をとして示しますYYYY-MM-DD
。
問題は、その形式を次のように変更できるDD-MM-YYYY
かどうかです。
dd/mm/yyyy
ます。モーメントやjQuery datepickerなどの別のライブラリを使用するだけ
回答:
フォーマットを変更することは不可能です
オーバーザワイヤ形式とブラウザのプレゼンテーション形式を区別する必要があります。
HTML5日付入力仕様が指すRFC 3339の仕様に等しいフル日付形式を指定し、: yyyy-mm-dd
。詳細については、RFC 3339仕様のセクション5.6を参照してください。
このフォーマットは、value
HTML属性とDOMプロパティによって使用され、通常のフォーム送信を行うときに使用されるフォーマットです。
ブラウザは、日付入力の表示方法に制限はありません。執筆時点では、Chrome、Edge、Firefox、およびOperaは日付をサポートしています(ここを参照)。それらはすべて日付ピッカーを表示し、入力フィールドのテキストをフォーマットします。
デスクトップデバイス
Chrome、Firefox、およびOperaの場合、入力フィールドのテキストのフォーマットは、ブラウザーの言語設定に基づいています。Edgeの場合は、Windowsの言語設定に基づいています。悲しいことに、すべてのWebブラウザーは、オペレーティングシステムで構成された日付形式を無視します。私にはこれは非常に奇妙な振る舞いであり、この入力タイプを使用するときに考慮すべきことです。たとえば、慣れている形式ではなく、オペレーティングシステムまたはブラウザの言語が設定されているオランダのユーザーen-us
が表示さ01/30/2019
れます30-01-2019
。
Internet Explorer 9、10、および11は、ワイヤー形式のテキスト入力フィールドを表示します。
モバイルデバイス
特にChrome on Androidの場合、フォーマットはAndroidの表示言語に基づいています。私はこれを確認することができませんでしたが、同じことが他のブラウザにも当てはまると思います。
この質問が出されて以来、Webの分野ではかなり多くのことが起こりました。最も刺激的なことの1つは、Webコンポーネントのランディングです。これで、ニーズに合うように設計されたカスタムHTML5要素でこの問題をエレガントに解決できます。htmlタグの動作をオーバーライド/変更したい場合は、シャドウdomを使用してビルドしてください。
良い知らせは、利用可能な定型文がすでにたくさんあるので、最初からソリューションを考え出す必要がないということです。ただ、チェックの人々が構築しているか、そこからアイデアを得ます。
あなたはこのようなタグを使用することを可能にするポリマーのdatetime-inputのようなシンプルな(そして実用的な)ソリューションから始めることができます:
<date-input date="{{date}}" timezone="[[timezone]]"></date-input>
または、希望するフォーマットとロケール、コールバック、およびオプションの長いリストを使用して、クリエイティブでポップアップの完全な日付ピッカーのスタイルを希望どおりに設定できます(完全なカスタムAPIを自由に使用できます!)
標準に準拠し、ハッキングはありません。
利用可能なポリフィル、それらがサポートするブラウザー/バージョン、およびユーザーベースの十分な%をカバーしているかどうかを再確認してください。それは2018年なので、ほとんどのユーザーを確実にカバーする可能性があります。
それが役に立てば幸い!
前述のとおり、形式を変更することは公式には不可能です。ただし、フィールドのスタイルを設定することは可能であるため、(少しのJSヘルプを使用して)希望する形式で日付を表示します。日付入力を操作する可能性の一部はこの方法で失われますが、フォーマットを強制したいという願望がより大きい場合は、この解決策が1つの方法である可能性があります。日付フィールドはそのままです。
<input type="date" data-date="" data-date-format="DD MMMM YYYY" value="2015-08-09">
残りは少しのCSSとJSです:http : //jsfiddle.net/g7mvaosL/
$("input").on("change", function() {
this.setAttribute(
"data-date",
moment(this.value, "YYYY-MM-DD")
.format( this.getAttribute("data-date-format") )
)
}).trigger("change")
input {
position: relative;
width: 150px; height: 20px;
color: white;
}
input:before {
position: absolute;
top: 3px; left: 3px;
content: attr(data-date);
display: inline-block;
color: black;
}
input::-webkit-datetime-edit, input::-webkit-inner-spin-button, input::-webkit-clear-button {
display: none;
}
input::-webkit-calendar-picker-indicator {
position: absolute;
top: 3px;
right: 0;
color: black;
opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<input type="date" data-date="" data-date-format="DD MMMM YYYY" value="2015-08-09">
デスクトップのChromeとiOSのSafariでうまく動作します(タッチスクリーンのネイティブ日付マニピュレーターは無敵のIMHOであるため、特に望ましいです)。他をチェックしませんでしたが、Webkitで失敗することはありません。
MMMM YYYY DD
と、DD
変更のみが行われます。このため-1、申し訳ありません
moment
関数の入力フォーマットを変更しましたが、それは進むべき道ではありません。変更する必要がdata-date-format="DD-YYYY-MM"
あり、その後、正しい結果である09-2015-08を取得します。
HTML5仕様には、どちらの形式もオーバーライドまたは手動で指定する手段は含まれていません。
value
属性はワイヤー形式と一致しますか、それともユーザーに何が表示されますか?
value
属性は常にワイヤー形式と一致します。
ブラウザはローカルの日付形式を使用すると思います。変更できるとは思わないでください。もちろん、カスタムの日付ピッカーを使用することもできます。
最後のベータ版のGoogle Chromeは最終的に入力を使用しtype=date
、形式はDD-MM-YYYY
です。
したがって、特定のフォーマットを強制する方法が必要です。HTML5 Webページを開発していますが、日付検索がさまざまな形式で失敗します。
M-D-Y
が、これは奇妙な形式です。アメリカ人がそれを他人に押し付けるのを見たことがありません。:-)
簡単な解決策が必要な場合は、これを試してください。yyyy-mm-ddを「dd- Sep -2016」にするには
1)入力の近くに1つのスパンクラスを作成します(ラベルとして機能)
2)日付がユーザーによって変更されるたびに、またはデータからロードする必要があるときに、ラベルを更新します。
Webkitブラウザーモバイルで動作し、IE11 +のポインターイベントにはjQueryとJquery Dateが必要です
$("#date_input").on("change", function () {
$(this).css("color", "rgba(0,0,0,0)").siblings(".datepicker_label").css({ "text-align":"center", position: "absolute",left: "10px", top:"14px",width:$(this).width()}).text($(this).val().length == 0 ? "" : ($.datepicker.formatDate($(this).attr("dateformat"), new Date($(this).val()))));
});
#date_input{text-indent: -500px;height:25px; width:200px;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script>
<input id ="date_input" dateformat="d M y" type="date"/>
<span class="datepicker_label" style="pointer-events: none;"></span>
たくさんの議論を読んだ後、私は簡単な解決策を用意しましたが、たくさんのJqueryとCSSを使いたくありません。
HTMLコード:
<input type="date" id="dt" onchange="mydate1();" hidden/>
<input type="text" id="ndt" onclick="mydate();" hidden />
<input type="button" Value="Date" onclick="mydate();" />
CSSコード:
#dt {
text-indent: -500px;
height: 25px;
width: 200px;
}
JavaScriptコード:
function mydate() {
//alert("");
document.getElementById("dt").hidden = false;
document.getElementById("ndt").hidden = true;
}
function mydate1() {
d = new Date(document.getElementById("dt").value);
dt = d.getDate();
mn = d.getMonth();
mn++;
yy = d.getFullYear();
document.getElementById("ndt").value = dt + "/" + mn + "/" + yy
document.getElementById("ndt").hidden = false;
document.getElementById("dt").hidden = true;
}
出力:
言ったように、<input type=date ... >
はほとんどのブラウザーで完全に実装されていないので、ブラウザー(クロム)のようなWebキットについて話しましょう。
Linuxを使用すると、環境変数を変更することで変更できますがLANG
、動作 LC_TIME
しないようです(少なくとも私にとっては)。
locale
端末に入力して現在の値を確認できます。同じ概念がIOSにも適用できると思います。
例:使用:
LANG=en_US.UTF-8 /opt/google/chrome/chrome
日付は次のように表示されます mm/dd/yyyy
使用:
LANG=pt_BR /opt/google/chrome/chrome
日付は次のように表示されます dd/mm/yyyy
あなたは使用することができますhttp://lh.2xlibre.net/locale/pt_BR/(変化するpt_BR
あなた自身のカスタムロケールを作成し、あなたが望むようあなたの日付をフォーマットするために、ロケールによっては)。
:変更デフォルトのシステム日付がどのように素敵な、より高度な参照 https://ccollins.wordpress.com/2009/01/06/how-to-change-date-formats-on-ubuntu/ と https://でaskubuntu。 com / questions / 21316 / how-can-i-customize-a-system-locale
あなたはあなたを使って実際の現在の日付フォーマットを見ることができますdate
:
$ date +%x
01-06-2015
しかしとしてLC_TIME
及びd_fmt
クロム(と私はそれがWebKitのかクロームのバグだと思う)によって拒否されるようですが、悲しいことに、それは動作しません。: '(
したがって、残念なことに、IF LANG
環境変数が問題を解決しない場合、応答はまだありません。
ブラウザは、ユーザーのシステム日付形式から日付入力形式を取得します。
(サポートされているブラウザー、Chrome、Edgeでテストされています。)
現在のところ、日付コントロールのスタイルを変更するための仕様で定義されている標準はないため、ブラウザに同じものを実装することはできません。
ただし、システム設定から日付形式を取得するこの振る舞いの方が優れており、オーバーライドしないでください。その理由は、ユーザーがシステム/デバイスで構成したものと同じ日付入力の形式を表示し、ロケールに慣れている、またはロケールと一致しているためです。
これは、ユーザーに表示される画面上のUIフォーマットにすぎないことを覚えておいてください。javascript/バックエンドでは、いつでも希望のフォーマットを維持できます。
ユーザーのコンピューターまたは携帯電話のデフォルトの日付形式を使用するWebキットブラウザーを変更することはできません。ただし、jqueryとjquery UIを使用できる場合は、設計可能な日付ピッカーがあり、開発者が望む任意の形式で表示できます。jquery UIの日付ピッカーへのリンクは、このページhttp://jqueryui.com/datepicker/にあります。デモ、コード、ドキュメント、またはドキュメントリンクを見つけることができます。
編集:-私はChromeがデフォルトでシステム設定と同じ言語設定を使用していることを見つけましたが、ユーザーはそれらを変更できますが、開発者はユーザーにそうするように強制することができないため、Webを検索できると他のjsソリューションを使用する必要がありますjavascript date-pickersまたはjquery date-pickerなどのクエリ
私は形式を変更する方法を見つけました、そのトリッキーな方法です。CSSコードだけを使用して日付入力フィールドの外観を変更しました。
input[type="date"]::-webkit-datetime-edit, input[type="date"]::-webkit-inner-spin-button, input[type="date"]::-webkit-clear-button {
color: #fff;
position: relative;
}
input[type="date"]::-webkit-datetime-edit-year-field{
position: absolute !important;
border-left:1px solid #8c8c8c;
padding: 2px;
color:#000;
left: 56px;
}
input[type="date"]::-webkit-datetime-edit-month-field{
position: absolute !important;
border-left:1px solid #8c8c8c;
padding: 2px;
color:#000;
left: 26px;
}
input[type="date"]::-webkit-datetime-edit-day-field{
position: absolute !important;
color:#000;
padding: 2px;
left: 4px;
}
<input type="date" value="2019-12-07">
投稿は2か月前から有効です。だから私も私の入力を与えることを考えました。
私の場合、dd / mm / yyyy形式のカードリーダーから日付を受け取ります。
私がやること。例えば
var d="16/09/2019" // date received from card
function filldate(){
document.getElementById('cardexpirydate').value=d.split('/').reverse().join("-");
}
<input type="date" id="cardexpirydate">
<br /><br />
<input type="button" value="fill the date" onclick="filldate();">
コードが何をするか:
これはすべて1行で行われます。
これは誰かに役立つと思ったので、これを書いた。
<input>
用途に値を表示するが。
2年前にこの問題を検索しましたが、グーグル検索で再びこの質問が表示されます。純粋なJavaScriptでこれを処理しようとする時間を無駄にしないでください。私はそれを作るために私の時間を無駄にしdd/mm/yyyy
ます。すべてのブラウザーに適合する完全なソリューションはありません。そのため、jQuery
datepickerを使用するか、代わりにデフォルトの日付形式を使用するようにクライアントに指示することをお勧めします
私はそれが古い投稿であることを知っていますが、それはグーグル検索の最初の提案、短い回答はありません、推奨回答はカスタム日付ピッカーです、私が使用する正しい答えはテキストボックスを使用して日付入力をシミュレートし、必要な形式を実行します、ここにコードがあります
<html>
<body>
date :
<span style="position: relative;display: inline-block;border: 1px solid #a9a9a9;height: 24px;width: 500px">
<input type="date" class="xDateContainer" onchange="setCorrect(this,'xTime');" style="position: absolute; opacity: 0.0;height: 100%;width: 100%;"><input type="text" id="xTime" name="xTime" value="dd / mm / yyyy" style="border: none;height: 90%;" tabindex="-1"><span style="display: inline-block;width: 20px;z-index: 2;float: right;padding-top: 3px;" tabindex="-1">▼</span>
</span>
<script language="javascript">
var matchEnterdDate=0;
//function to set back date opacity for non supported browsers
window.onload =function(){
var input = document.createElement('input');
input.setAttribute('type','date');
input.setAttribute('value', 'some text');
if(input.value === "some text"){
allDates = document.getElementsByClassName("xDateContainer");
matchEnterdDate=1;
for (var i = 0; i < allDates.length; i++) {
allDates[i].style.opacity = "1";
}
}
}
//function to convert enterd date to any format
function setCorrect(xObj,xTraget){
var date = new Date(xObj.value);
var month = date.getMonth();
var day = date.getDate();
var year = date.getFullYear();
if(month!='NaN'){
document.getElementById(xTraget).value=day+" / "+month+" / "+year;
}else{
if(matchEnterdDate==1){document.getElementById(xTraget).value=xObj.value;}
}
}
</script>
</body>
</html>
1-このメソッドは日付タイプをサポートするブラウザでのみ機能することに注意してください。
2- JSコードの最初の関数は、日付タイプをサポートせず、外観を通常のテキスト入力に設定するブラウザー用です。
3-このコードをページの複数の日付入力に使用する場合は、関数呼び出しと入力自体の両方でテキスト入力のID「xTime」を別のものに変更し、もちろん、必要な入力の名前を使用してくださいフォーム送信。
4番目の関数では、day + "/" + month + "/" + yearたとえば例year + "/" + month + "/" + dayの代わりに任意のフォーマットを使用でき、テキスト入力でプレースホルダーまたは値を次のように使用しますページの読み込み時のユーザーのyyyy / mm / dd。