2017-07-31 5 views
0

私は次のようにフォーマットする日付の異なる種類があります。どのように日付の異なるフォーマットを扱いますか?

  • 27 - 1945年8月8月28日663 CE

  • 22を5月19日

  • 1945年5月4日 - 1945年8月22日

  • 5/4/1945

  • 2-71232

  • 1020年3月4日

  • 1/3/1 (year 1)

  • 09/08/0 (year 0)

注彼らはすべての異なるフォーマット、異なる順序、いくつかあります2ヶ月間、いくつか唯一の、私はmoment jsの結果を使用しようとしたが、私はまだdate jsを使用しようとしたが、幸運。

私はいくつかの分割を実行しようとしました:

dates.push({ 
    Time : [] 
}); 

function doSelect(text) { 
    return $wikiDOM.find(".infobox th").filter(function() { 
    return $(this).text() === text; 
    }); 
} 
dateText = doSelect("Date").siblings('td').text().split(/\s+/g); 
for(var i = 0; i < dateText.length; i++) { 
    d += dateText[i] + ' '; 
} 
dates[0].Time.push(d); 

しかし、結果は次のとおりです。

"Time": [ 
      "27 - 28 August 663 CE ", 

結局、私は自動生成するために必要なものです:

<ul class="Days"> 
    <li>27</li> 
    <li>28</li> 
</ul> 

<ul class="Months"> 
    <li>August</li> 
</ul> 

<ul class="Year"> 
    <li>663</li> 
</ul> 

とも考えます処理する方法CEまたはADまたはBC

私が使用したい理想的な方法は、多次元配列であることを達成するために:その後、max 2 numbers for daysをチェックJanuary, February, March..のような文字列のリストに対して、数ヶ月をチェックし3 numbers to max 4 numbers分年しおそらく

time.push({ 
    Day : [], 
    Month : [], 
    Year : [], 
    Prefix : [] 
}); 

prefix with some conditionalsを処理します。しかし、まだ、についてはyear 2 or 1?または、日付が02/9/1975の場合はどうですか?または、dashを分離して、新しいフォーマットにします。私はロジックがあると思いますが、それらがすべて異なるフォーマットであるという事実を考慮して、これらの日付を上記のように多次元配列に分割する方法はありますか?

+0

これは、日付のライブラリが勝ったことを文字列解析の問題です場合によっては最終的な文字列を検証することを除いて助けになる可能性があり、些細な問題ではない – charlietfl

+0

@charlietflはい、実際には助けにはなりませんでした。私は文字列を分割し、最後にいくつかの追加の考えで更新された質問をチェックしたいと思います。 –

+0

おそらくあなたのデータ(とそれぞれのパーサ)から掻き集めた既知のフォーマットの正規表現をたくさん作る必要があります。新しい正規表現を書くことができるように、新しい正規表現を見つけたらそれを保存します – charlietfl

答えて

0

私は新しいパーサを構築するつもりですが、私はこの答えをますます更新していきます。お気軽に投稿してください。

だから、これらのフォーマットのために、私はやります:

27 - 28 August 663 CE 
22 August 1945 19 May 
May 4 1945 – August 22 1945 
5-10 February 1720 

JS

months = new Set(["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]); 
for(var i = 0; i < dateText.length; i++) { 
    d += dateText[i] + ' '; 
} 
var words = d.replace("–", " ").replace("-", " ").replace(",", " ").replace("/", " ").split(' '); 
words = $.grep(words, function(n, i){ 
    return (n !== "" && n != null); 
}); 
var array = words; 
var newArray = array.filter(function(v){return v!==''}); 
for (const word of newArray) { 
if (months.has(word)) { 
    spacetime[0].Time.months.push(word); 
} else if (+word < 32) { 
    spacetime[0].Time.days.push(+word); 
} else if (+word < 2200) { 
    spacetime[0].Time.years.push(+word); 
} else if (/\w+/.test(word)) { 
    spacetime[0].Time.suffixes.push(word); 
} 

JSON例:

 "Time": { 
      "days": [ 
       22 
      ], 
      "months": [ 
       "August" 
      ], 
      "years": [ 
       1945 
      ], 
      "suffixes": [ 
       "10:25", 
       "(UTC+1)" 
      ] 
関連する問題