2016-09-30 2 views
3

で別の日付を返します。スペースで区切っルビー2.3.1 Date.parseは、セパレータは、ちょうど私のルビーコンソールで、この今日得たスペース文字

$ irb 
2.3.1 :001 > require 'date' 
=> true 
2.3.1 :002 > Date.parse '30/08/2016' 
=> #<Date: 2016-08-30 ((2457631j,0s,0n),+0s,2299161j)> 
2.3.1 :003 > Date.parse '30 08 2016' 
=> #<Date: 2016-09-30 ((2457662j,0s,0n),+0s,2299161j)> 
2.3.1 :004 > 

を(日付は仕事からスプレッドシートにこのようにフォーマットされました。.. .dontなぜ?..)、それは私に1ヶ月後の日付を与えた!!

私には何が欠けていますか?とにかく無効な形式を渡しているので、正しい日付を期待してはいけませんか?

+0

それは実際にオフ1 'Date.parse('30 01 2016' )による'私 '#<日付与えていない:2016年9月30日((2457662j、0、0N)を、+ 0、2299161j) > '。現在の月を使用しているようです。 – Rashmirathi

+3

実際には、今年もそうだから年は正しいだけです。 'Date.parse '01 01 2015''は'# 'を返します。最初のスペースが解析されて無効とみなされ、現在の月/年が使用されているように見えます。 – Rashmirathi

答えて

2

使用Date.strptime代わりに、それは

Date.strptime('30 08 2016', '%d %m %Y') 
=> #<Date: 2016-08-30 ((2457631j,0s,0n),+0s,2299161j)> 

すなわち入力

を解析するためのテンプレートを取ることができますちょうど私のコメントを再反復、それはDate.parseのように見えますが、最初のスペースの後に入力を無視し、現在の月と年を使用します。

Date.parse '01 01 2015' 
=> #<Date: 2016-10-01 ((2457663j,0s,0n),+0s,2299161j)> 

あなたが月を綴るならば、十分なスペースがあれば問題ありません。

Date.parse '01 jan 2015' 
=> #<Date: 2015-01-01 ((2457024j,0s,0n),+0s,2299161j)> 
関連する問題