2012-05-03 3 views
28

可能性の重複使用して "DD/MM/YYYY" または "DD-MM-YYYY" または "DD-MMM-YYYY" フォーマットされた日付文字列解析する方法:
Extending JavaScript's Date.parse to allow for DD/MM/YYYY (non-US formatted dates)?
Convert dd-mm-yyyy string to date1985年5月9日、と私は05 - 9月 - 1985(DD-MMM-YYYY)形式に変換したい:JavaScriptやjQueryの

は、たとえば、テキストボックスに日付を入力しました。どうすればこれを達成できますか?ソース形式は、dd-mm-yyyyまたはdd/mm/yyyyまたはdd-mmm-yyyy形式であることに注意してください。

コードスニペット:

function GetDateFormat(controlName) { 
     if ($('#' + controlName).val() != "") {  
      var d1 = Date.parse($('#' + controlName).val()); 
      if (d1 == null) { 
       alert('Date Invalid.'); 
       $('#' + controlName).val(""); 
      } 
       var array = d1.toString('dd-MMM-yyyy'); 
       $('#' + controlName).val(array); 
     } 
    } 

このコードは09-月 - 1985を返しますが、私は05 - 9月 - 1985をしたいです。ありがとう。

答えて

39

var day = moment("12-25-1995", "MM-DD-YYYY"); 
:簡単に操作

の日付オブジェクト次に、あなたのようなことを行うことができます

または

var day = moment("25/12/1995", "DD/MM/YYYY"); 

、日付

day.add('days', 7) 

上で動作し、ネイティブのJavaScript日付

day.toDate(); 
31

更新

あなたは言った下:

を申し訳ありませんが、私は前の日付形式を予測することはできません、それはDD-MM-YYYYまたはDD/MM/YYYYのようにする必要がありますかdd-mmm-yyyy形式にしました。私はこの形式をすべてdd-MMM-yyyy形式に変換したかったのです。

完全その質問を変更します。あなたがフォーマットを制御できないなら、はるかに複雑になるでしょう。 JavaScriptには、日付形式を指定できるものはありません。正式には、JavaScriptでサポートされている唯一の日付形式はsimplified version of ISO-8601yyyy-mm-ddですが、実際にはほとんどのブラウザもyyyy/mm/ddをサポートしています。しかしそれ以外には、自分でコードを書く必要があります(または、これははるかに意味があります)。私はおそらくmoment.jsまたはDateJSのようなライブラリを使用しているでしょう(ただし、DateJSは何年も維持されていません)。


オリジナルの答え

フォーマットは常にdd/mm/yyyyである場合、これは簡単です:

var parts = str.split("/"); 
var dt = new Date(parseInt(parts[2], 10), 
        parseInt(parts[1], 10) - 1, 
        parseInt(parts[0], 10)); 

splitは、指定された区切り文字で文字列を分割します。次に、parseIntを使用して文字列を数値に変換し、new Dateコンストラクタを使用して、これらの部分からDateを作成します。3番目の部分は、年、2番目の部分は月、1番目は部分です。 Dateは、0から始まる月の数字を使用するので、月の数字から1を減算する必要があります。

+0

は申し訳ありませんが、私は前の日付形式を予測することはできません取得する、それがあるべきdd-mm-yyyyまたはdd/mm/yyyyまたはdd-mmm-yyyy形式のように、私はこの形式をすべてdd-MMM-yyyy形式に変換したいと考えました。 –

+0

@SharanammaJekeen:**完全に**は質問を変えます。更新を参照してください。 –

+0

ソース形式をdd/mm/yyyy形式に修正します。 –

7

Date.parseは特定のフォーマットのみを認識し、入力フォーマットが何であるかを伝えるオプションはありません。この場合、入力はmm/dd/yyyyの形式であると考えられ、結果は間違っています。

は、この問題を解決するには、どちらかが(例えばString.splitで)入力を自分で解析し、manually constructDateオブジェクト、またはそのようなdatejsなどのより完全な機能を備えたライブラリを使用する必要があります。手動解析のための

例:

var input = $('#' + controlName).val(); 
var parts = str.split("/"); 
var d1 = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0])); 

例使用date.js:

var input = $('#' + controlName).val(); 
var d1 = Date.parseExact(input, "d/M/yyyy"); 
+0

これで私はどのように上記のフォーマットを達成できますか? –

+0

@SharanammaJekeen:何を意味するのか分かりません... – Jon

+1

date.jsは便利です! – yorkw

2

はこれを試してみてください:

function GetDateFormat(controlName) { 
     if ($('#' + controlName).val() != "") {  
      var d1 = Date.parse($('#' + controlName).val().toString().replace(/([0-9]+)\/([0-9]+)/,'$2/$1')); 
      if (d1 == null) { 
       alert('Date Invalid.'); 
       $('#' + controlName).val(""); 
      } 
       var array = d1.toString('dd-MMM-yyyy'); 
       $('#' + controlName).val(array); 
     } 
    } 

regexpは.replace(/([0-9]+)\/([0-9]+)/,'$2/$1')変更日/月の位置を交換してください。

+0

'RegEx'をうまく使います。 –

0

この

はあなたが日付で何かを行うことができます参照してください。

ファイル:http://stevenlevithan.com/assets/misc/date.format.js

は、スクリプトタグを使用して、HTMLコードにこれを追加し、としてそれを使用することができます使用する:あなたは、ネイティブのJavaScriptをラップhttp://momentjs.com/のようなヘルパーライブラリを使用する場合があります

var now = new Date(); 

now.format("m/dd/yy"); 
// Returns, e.g., 6/09/07 
+0

http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links-elsewhere-really-good-answers –

+1

私の間違いを少なくとも私が知ることができるように - voteのコメントを追加してください –

+0

私は、OPが日付を「dd/mm/yyyy」の形式に変換する方法を尋ねたので、あなたの応答は現在の日付をどのように書式設定しているかのように思われます。 –

関連する問題