E
E
eldar_web2015-09-07 18:22:05
Ruby on Rails
eldar_web, 2015-09-07 18:22:05

How to find the difference in hours between two dates in RUBY???

For example, there is a past date: There is a today's date: I want to calculate the difference in hours between these dates. I tried this, it doesn't work:
old_date = '04.08.2015'
today_date = '07.09.2015'

today_date = Date.strptime(Date.today.day.to_s+'.'+Date.today.month.to_s+'.'+Date.today.year.to_s, "%d.%m.%Y").time %>
old_date = Date.strptime(subscription.created_at.strftime("%d.%m.%Y"), "%d.%m.%Y") %>
(old_date - today_date).to_i

How to solve???

Answer the question

In order to leave comments, you need to log in

5 answer(s)
K
Karim Kyatlottyavi, 2015-09-07
@constXife

m?

require 'date'
old_date = Date.strptime('04.08.2015', '%d.%m.%Y')
today_date = Date.strptime('07.09.2015', '%d.%m.%Y')
(today_date - old_date).to_i * 24 # 816

D
Dima, 2015-09-07
@MAXOPKA

(('22.02.2014'.to_date - '15.02.2014'.to_date).to_i * 24) + 24

E
entermix, 2015-09-07
@entermix

I pulled it out from Kohana, it might help, you just have to rewrite it in Ruby, the function returns the difference between two numbers

/**
   * Returns time difference between two timestamps, in human readable format.
   * If the second timestamp is not given, the current time will be used.
   * Also consider using [Date::fuzzy_span] when displaying a span.
   *
   *     $span = Date::span(60, 182, 'minutes,seconds'); // array('minutes' => 2, 'seconds' => 2)
   *     $span = Date::span(60, 182, 'minutes'); // 2
   *
   * @param   integer $remote timestamp to find the span of
   * @param   integer $local  timestamp to use as the baseline
   * @param   string  $output formatting string
   * @return  string   when only a single output is requested
   * @return  array    associative list of all outputs requested
   */
  public static function span($remote, $local = NULL, $output = 'years,months,weeks,days,hours,minutes,seconds')
  {
    // Normalize output
    $output = trim(strtolower( (string) $output));

    if ( ! $output)
    {
      // Invalid output
      return FALSE;
    }

    // Array with the output formats
    $output = preg_split('/[^a-z]+/', $output);

    // Convert the list of outputs to an associative array
    $output = array_combine($output, array_fill(0, count($output), 0));

    // Make the output values into keys
    extract(array_flip($output), EXTR_SKIP);

    if ($local === NULL)
    {
      // Calculate the span from the current time
      $local = time();
    }

    // Calculate timespan (seconds)
    $timespan = abs($remote - $local);

    if (isset($output['years']))
    {
      $timespan -= Date::YEAR * ($output['years'] = (int) floor($timespan / Date::YEAR));
    }

    if (isset($output['months']))
    {
      $timespan -= Date::MONTH * ($output['months'] = (int) floor($timespan / Date::MONTH));
    }

    if (isset($output['weeks']))
    {
      $timespan -= Date::WEEK * ($output['weeks'] = (int) floor($timespan / Date::WEEK));
    }

    if (isset($output['days']))
    {
      $timespan -= Date::DAY * ($output['days'] = (int) floor($timespan / Date::DAY));
    }

    if (isset($output['hours']))
    {
      $timespan -= Date::HOUR * ($output['hours'] = (int) floor($timespan / Date::HOUR));
    }

    if (isset($output['minutes']))
    {
      $timespan -= Date::MINUTE * ($output['minutes'] = (int) floor($timespan / Date::MINUTE));
    }

    // Seconds ago, 1
    if (isset($output['seconds']))
    {
      $output['seconds'] = $timespan;
    }

    if (count($output) === 1)
    {
      // Only a single output was requested, return it
      return array_pop($output);
    }

    // Return array
    return $output;
  }

E
eldar_web, 2015-09-07
@eldar_web

So here I only have the date, can't I calculate the hours?

A
Alexey, 2015-09-08
@ringo

But more concise)

require 'date'
(Date.parse(today_date) - Date.parse(old_date)).to_i*24

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question