2017-11-30 22 views
0

これは、日付入力html日付入力値から月名を取得するにはどうすればよいですか?

<input id="customer-date" name="customer-date" type="date" required> 

であり、これはスクリプト

const customerDate = document.getElementById('customer-date').value; 
const dateHandler = document.getElementById('date-handler'); 
dateHandler.innerHTML = customerDate; 

あるしかし、私は、日付、値を選ぶとき、私はこの問題は、ということです2017-11-22のようにフォーマットされdateHandlerに表示するために取得format="dd/MM/yyyy"属性では、表示時に明らかに混乱することがあります。だから私はそのような2017-November-22を表示するために、選択した日付から月の名前を取得したい。何か案は?

+0

あなたは[こちら](https://www.w3schools.com/jsref/jsref_getmonth.asp)を見ましたか? –

+0

html5日付入力を使用してこれを行う[文書化された方法](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date)はありません。 これを行うには、独自または第三者のjavascript実装を使用するか、日、月、年の3つの入力フィールドに分割する必要があります。 – Joschi

答えて

0

ここで私が作った簡単な解決策、私はそれはあなたが好きDate() JavaScript関数を使用することができます

function showdate() { 
 
    var customerDate = document.getElementById('customer-date').value; 
 
    var dateHandler = document.getElementById('date-handler'); 
 
    dateHandler.innerHTML = customerDate; 
 

 
    var months = new Array(); 
 
    months[0] = "January"; 
 
    months[1] = "February"; 
 
    months[2] = "March"; 
 
    months[3] = "April"; 
 
    months[4] = "May"; 
 
    months[5] = "June"; 
 
    months[6] = "July"; 
 
    months[7] = "August"; 
 
    months[8] = "September"; 
 
    months[9] = "October"; 
 
    months[10] = "November"; 
 
    months[11] = "December"; 
 

 
    var date = new Date(customerDate); 
 
    var month = months[date.getMonth()]; 
 
    //converting the date into array 
 
    var dateArr = customerDate.split("-"); 
 
    //setting up the new date form 
 
    var forDate = dateArr[0] + "-" + month + "-" + dateArr[2]; 
 
    document.getElementById("new-date-handler").innerHTML = forDate; 
 
}
<input id="customer-date" name="customer-date" type="date" required> 
 
<input type=button value=validate onclick="showdate()"> 
 
<p id="date-handler"></p> 
 
<p id="new-date-handler"></p>

+0

それが動作するソリューションをありがとう! @ soltani-neji –

+0

YYYY-MM-DDの日付形式はUTCとして解析されますが、月のローカル値を使用しているため、開始時のローカルタイムゾーンに等しい期間、間違った月を返します。月の終わり。実際、ここでDateオブジェクトを使用する理由はまったくありません。あなたがやっていることは、それをDateに解析し、最初に入力された月の数字を取り戻すことです。だから、月の番号を取得し、 'month = months [dateArr [1]]'という短縮名に変換するだけです。 – RobG

1

役に立てば幸いです:あなたがする探している場合

Date.prototype.getFullDate = function() { 
    return this.getFullYear() + '-' + this.toLocaleString(undefined, {month:'long'}) + '-' + this.getDate(); 
} 
const dateStr = document.getElementById('customer-date').value.split('/'); 
var date = new Date(dateStr[2], dateStr[1], dateStr[0]); 
document.getElementById('date-handler').innerHTML = date.getFullDate(); 
+0

'getMonth'は数字を返します –

+0

はい、私は更新しました。 – GGO

1

は、月の番号から月の名前を取得するだけで、これを使うことができます:

var str = "2017-11-22"; // this would be your date 
var res = str.split("-"); // turn the date into a list format (Split by/if needed) 
var months = ["Jan", "Feb", "March", "April", "May", "June", "July", 
"August", "September", "October", "November", "December"]; 
console.log(months[res[1]-1]) // month name 

JSFiddle:日付文字列を再フォーマットするとhttps://jsfiddle.net/p8fwhydc/1/

+0

私がしたこととほとんど同じですが、なぜ配列の先頭に空の文字列を置いたのですか? –

+0

私はそれを投稿したので、答えを見ませんでした。空の文字列は配列が0から始まるためです。0番目の月はありません。 – Noy

+0

インデックスに '+ 1'を追加する方が良い解決策です。 –

0

、あなたは常にノイの答えに関しては、単なる文字列を再フォーマットし、完全にDateオブジェクトを避けることを検討すべきです。

ただし、解析と書式設定の落とし穴を避けるために注意が必要な場合は、Dateオブジェクト機能を使用することもできます。

質問このタイプの一つで二つの質問である:最初のケースで

  1. How do I parse the string to a Date
  2. How do I format the date

、YYYY-MM-DDの日付形式は、UTCとして解析されるべきです(一部のブラウザではそうでないかもしれません)ので、手動で解析する必要があります。

フォーマットされた文字列を生成することは、サポートされているIntlオブジェクトを利用して、ホストのデフォルト言語で文字列を取得することができます。

// Parse string in YYYY-MM-DD format as local 
 
function parseYMD(s) { 
 
    var b = s.split(/\D/); 
 
    return new Date(b[0], b[1]-1, b[2]); 
 
} 
 

 
// Format Date as D-MMMM-YYYY using host default language for month name 
 
function formatDMMMMY(date) { 
 
    function z(n){return (n<10?'0':'') + n} 
 
    return date.getFullYear() + '-' + 
 
     date.toLocaleString(undefined, {month:'long'}) + '-' + 
 
     z(date.getDate()); 
 
} 
 

 
var s = '2017-11-22'; 
 
console.log(parseYMD(s).toString()); 
 
console.log(formatDMMMMY(parseYMD(s)));

関連する問題