1

我需要在 ruby​​motion 中将当前日历月的结束日期作为 Time 对象。

因此,对于 2012 年 10 月,考虑到当前时间,我需要 2012 年 10 月 31 日午夜作为 的实例Time,而不管当天如何。

我该怎么做呢?

编辑

我很欣赏这些答案,但我没有提及的一件事——抱歉——是我正在使用 RubyMotion 并且 Date 和 DateTime 对象不可用。

基本上,您require在 ruby​​ 中加载的任何内容,我都无权访问。

4

4 回答 4

2

由于您使用的是 RubyMotion,因此您可以访问所有 iOS SDK:

NSDate *curDate = [NSDate date];
    NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDateComponents* comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // Get necessary date components

    comps = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit fromDate:curDate]; // Get necessary date components
    // set last of month
    [comps setMonth:[comps month]+1];
    [comps setDay:0];
    NSDate *tDateMonth = [calendar dateFromComponents:comps];
    NSLog(@"%@", tDateMonth);

发现于获取一个月的最后一天

翻译成 RubyMotion:

    curDate = NSDate.date
    calendar = NSCalendar.currentCalendar

    # Get necessary date components
    comps = calendar.components(NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSWeekdayCalendarUnit, fromDate:curDate)

    # set last of month
    comps.month += 1
    comps.day = 0
    tDateMonth = calendar.dateFromComponents(comps)
    NSLog("%@", tDateMonth)
于 2012-10-10T22:36:32.603 回答
1

我认为这应该可以解决问题..

require 'date'
(DateTime.now.next_month - DateTime.now.day).to_time

例子:

ruby-1.9.3-p194 :001 > require 'date'
 => true 

ruby-1.9.3-p194 :02 > DateTime.now
 => #<DateTime: 2012-10-10T17:18:15-05:00 ((2456211j,80295s,284081000n),-18000s,2299161j)> 

ruby-1.9.3-p194 :03 > DateTime.now.next_month - DateTime.now.day
 => #<DateTime: 2012-10-31T17:18:16-05:00 ((2456232j,80296s,819683000n),-18000s,2299161j)> 

ruby-1.9.3-p194 :04 > (DateTime.now.next_month - DateTime.now.day).to_time
 => 2012-10-31 17:18:18 -0500 
于 2012-10-10T22:16:09.673 回答
0

Ruby on Rails方法

Time.now.at_end_of_month
于 2012-10-10T22:09:17.710 回答
0

您可以增加“开始”日期时间,直到它滚动到下个月:

require 'date'

def last_day_of_month(date=DateTime.now)
  month = date.month
  date += 1 while month == (date + 1).month
  date.to_time
end

last_day_of_month # => 2012-10-31 16:17:21 -0600
nov_1_2010 = DateTime.parse('2010-11-01T01:01:01-0700')
last_day_of_month(nov_1_2010) # => 2010-11-30 01:01:01 -0700 
于 2012-10-10T22:18:30.813 回答