2012-08-15 58 views
0

所以在PHP中我有一些代碼,提取日,月,年爲整數,這樣的事情:PHP和Ruby:解析日期

// Grab the Date 
    $date = date("mdy"); 
    $day = (int) substr($date, 2, 2); 
    $month = (int) substr($date, 0, 2); 
    $yr = (int) substr($date, 4); 

我想要做的紅寶石一樣。我以爲我找到了

# Grab the Date 
    now = Date.new(Time.now).to_date 
    date = Date.parse(now) 
    day = date.mday 
    month = date.mon 
    yr = date.year 

我試過這個主題,每次失敗,呼籲星期二8月14日01:16

私有方法`TO_DATE的時間變化的答案:00 -0600 2012:時間(NoMethodError)

我確定答案是在網絡上的某個地方,但我沒有向Google提出正確的問題,因爲我沒有找到它。我只在Ruby中編寫了幾個月的代碼,我認爲這很簡單。那麼我錯過了什麼?

感謝

回答

1

我覺得你只是想:

now = Time.now 

day = now.mday 

month = now.mon 

yr = now.year 

順便說一句,你可以做到這一點更乾淨,沒有substr()操作,在PHP中:

$date = new DateTime; 

$day = (int) $date->format('j'); 

$month = (int) $date->format('n'); 

$year = (int) $date->format('Y'); 
+0

這正是我在當前應用程序中尋找的內容。我還沒有測試@ Catnapper的建議,但我也喜歡它。我一直忘記你可以在Ruby中擴展類。至於PHP的部分去...我想我的代碼是儘可能瘦 - 一個單一的8字符串的日期和substr提取。我認爲PHP有​​類似你使用的類。但是,我認爲你在做什麼會佔用更多的內存和CPU時間。差別可能可以忽略不計,但我傾向於運行數百個併發任務,所以我儘量將事情保持在我知道如何處理的地方。 – 2012-08-15 15:12:01

+0

是的,很酷,你可以在Ruby中動態修改類。我可能會在PHP中做一點不同於你的第一個地方(不確定上下文是什麼)。但我認爲我所建議的是一種更清晰的方式,以最終達成你想要的變革。不知道CPU(我可以看到它會以任何方式)。可能會消耗更多的內存,儘管您可以在提取值之後清除對象:'unset($ date)'。我可以想象,在許多情況下,這兩種方法的差別都可以忽略不計,遠遠超過了更優雅的代碼,但我不知道你的具體情況。 – JMM 2012-08-15 21:48:53

+0

我認爲在這種情況下資源問題可以忽略不計。這更多的是習慣問題。也就是說,我通常會嘗試編寫健壯且易於閱讀的代碼。在大多數情況下,我不會使用沒有相關注釋的substr命令,比如「從中提取諸如此類」。在這種情況下,變量名稱表現得相當好。而且,我猜測,即使可以衡量,資源使用的差異也是最小的。那麼我們只是在編碼風格上偏好。 - 謝謝 – 2012-08-16 07:00:54

1
require 'date'  
def date_to_array date = Date.today 
    [date.year, date.mon, date.mday] 
end 

或者,也許,如果您在應用程序的所有位置使用它,請延長Date:

require 'date' 
class Date 
    def to_a 
    [self.year, self.mon, self.mday] 
    end 
end 
+0

我給你一個投票,但答案。我喜歡這個建議,但這不是我想要的這段代碼。感謝提醒我可以在Ruby中擴展類。 – 2012-08-15 15:13:24

+0

@Gabe我認爲在PHP中爲數據建議其他格式,但決定只是複製你正在使用的變量。一個類似於@Catnapper在這裏的想法是'$ date = explode(「 - 」,$ date-> format('jny'))',但如果要定義一個方法的麻煩,我寧願返回一個assoc數組(哈希)。你可以這樣做:'$ date = array_combine(array('day','month','year'),explode(「 - 」,$ date-> format('j-n-y')))''。 PHP的'getdate()'是完美的,只是它沒有TZ參數,並且在本地時間(ugh)聲明瞭值。太糟糕了沒有equiv。方法在DateTime上。 – JMM 2012-08-15 21:57:12

1

有很多你可以做的日期操縱,尋找更多的Documentation!但請不要使用帶有重音的紅寶石:)

require 'date' 

Date.new(2001,2,3).year 
#=> 2001 

Date.new(2001,2,3).yday 
#=> 34 Returns the day of the year (1-366) 

Date.today.day 
#=> 14 

date = Date.new(2008, 12, 22) 
date.day 
#=> 22 
date.month 
#=> 12 
date.year 
#=> 2008 

Date.new(2001,2,3).strftime '%Y' 
#=> "2001"