রুবি তারিখ বিয়োগ (যেমন 90 দিন আগে)


89

এর জোডা টাইম এপিআই দ্বারা আমি কিছুটা নষ্ট হয়েছি:

DateTime now = new DateTime();
DateTime ninetyDaysAgo = now.minusDays(90);

আমি রুবিতে অনুরূপ কাজ করার চেষ্টা করছি, তবে আমি

now = Time.now
ninetyDaysAgo = now - (90*24)

যাইহোক, গণিতটি এখানে বন্ধ আছে (আমি সত্যিই মধ্যরাতে খেজুর নিয়ে কাজ করছি)।

তারিখ বিয়োগের জন্য কি বন্ধুত্বপূর্ণ এপিআই আছে?

উত্তর:


107
require 'date'
now = Date.today
ninety_days_ago = (now - 90)

আমি প্রাপ্ত আইআরবি কনসোলের মাধ্যমে এটি চালাচ্ছি:

>>require 'date'
now = Date.today
ninety_days_ago = (now - 90)

require 'date'
=> false
now = Date.today
=> #<Date: 2011-03-02 (4911245/2,0,2299161)>
ninety_days_ago = (now - 90)
=> #<Date: 2010-12-02 (4911065/2,0,2299161)>

আপনার যদি সময় প্রয়োজন হয় তবে আপনি কেবল বলতে পারেন now = DateTime.now


আপনার আসল পোস্ট, প্রাক সম্পাদনা আমার যা প্রয়োজন প্রয়োজন তার কাছাকাছি ছিল, কিন্তু তারিখ.এখন সুরক্ষিত ছিল। তারিখ.আজ আজ কাজ করেছেন। আপনি যদি এখন প্রথম তারিখটি তৈরি করার জন্য আপনার প্রথম ব্লার্ব পরিবর্তন করেন = তারিখ: আজ, আমি এটি গ্রহণ করব।
দারথ্রেভিনো

4
@ ম্যাট: এবং দিনের পরিবর্তে 90 ঘন্টা কীভাবে বিয়োগ করবেন?
এস্তেবান ফিল্ডম্যান

@ ইস্তেবানফিল্ডম্যান Dateএছাড়াও ভগ্নাংশের অনুমতি দেয় যাতে আপনি এটি করতে পারেন Date.today - (90.0/24.0)। ফলাফল সহজেই রূপান্তরিত হতে পারে to_datetimeবা to_timeখুব বেশি।
jchook

15

যারা রিয়েল ব্যবহার করছেন তাদের জন্য নিম্নলিখিতটি দেখুন:

DateTime.now - 10.days
=> Sat, 04 May 2013 12:12:07 +0300

20.days.ago - 10.days
=> Sun, 14 Apr 2013 09:12:13 UTC +00:00

10

আপনি যদি রেলগুলি ব্যবহার করছেন বা অ্যাক্টিভসপোর্ট সহ কিছু মনে করেন না, আপনি এই জাতীয় সংখ্যা # দিনের ডিএসএল ব্যবহার করতে পারেন :

ruby-1.9.2-p136 :002 > Date.today
 => Wed, 02 Mar 2011 
ruby-1.9.2-p136 :003 > Date.today - 90.days
 => Thu, 02 Dec 2010 

যেহেতু আপনি সময়ের পরিবর্তে তারিখগুলি নিয়ে কাজ করছেন, আপনারও হয় তারিখের উদাহরণ দিয়ে শুরু করা উচিত, বা আপনার ডেটটাইম ইনটেন্সগুলি # টু_ডেট দিয়ে রূপান্তর করা উচিত। তারিখের উদাহরণ থেকে সংখ্যাগুলি যোগ / বিয়োগ করার সময়, সংখ্যাগুলি স্পষ্টতই দিন।

ruby-1.9.2-p136 :016 > DateTime.now.to_date
 => #<Date: 2011-03-02 (4911245/2,0,2299161)> 
ruby-1.9.2-p136 :017 > DateTime.now.to_date - 90
 => #<Date: 2010-12-02 (4911065/2,0,2299161)> 

8

রুবি তারিখ এবং তারিখটাইম ক্লাসে তারিখ গণিত সমর্থন করে , যা রুবির মানক লাইব্রেরির অংশ। এই উভয় শ্রেণিই # + এবং # - পদ্ধতি প্রকাশ করে যা কোনও তারিখ বা সময় থেকে দিন যোগ করে বিয়োগ করে।

$ irb
 > require 'date'
 => true 
 > (DateTime.new(2015,4,1) - 90).to_s  # Apr 1, 2015 - 90 days
 => "2015-01-01T00:00:00+00:00"
 > (DateTime.new(2015,4,1) - 1).to_s   # Apr 1, 2015 - 1 day
 => "2015-03-31T00:00:00+00:00" 

ব্যবহার করুন # << এবং # >> দিন পরিবর্তে মাস কাজ করার পদ্ধতি। মাসগুলিতে গাণিতিক দিনগুলিতে গাণিতিকের চেয়ে কিছুটা আলাদা। ডেটটাইমের পরিবর্তে তারিখ ব্যবহার প্রভাব আরও সুস্পষ্ট করে তোলে।

 > (Date.new(2015, 5, 31) << 3).to_s  # May 31 - 3 months; 92 days diff
 => "2015-02-28" 

আপনার জোদা-সময়ের উদাহরণ অনুসরণ করে আপনি রুবিতে এমন কিছু লিখতে পারেন।

now =  DateTime.now
ninety_days_ago = now - 90

অথবা সম্ভবত ঠিক

ninety_days_ago = DateTime.now - 90

5

এটি একটি অতি পুরানো পোস্ট, তবে আপনি যদি কোনও Timeঅবজেক্টের সাথে রাখতে চান তবে মূলত আপনাকে যেমন কোনও Dateঅবজেক্টে স্যুইচ করার পরিবর্তে জিজ্ঞাসা করা উচিত বলে মনে করা হয়েছিল Ruby Facets

রুবি ফেসসগুলি মূল রুবি ক্লাসগুলির জন্য এক্সটেনশনের একটি মানকৃত গ্রন্থাগার।

http://rubyworks.github.io/facets/

ফেকসগুলির প্রয়োজনীয়তার দ্বারা আপনি সময় অবজেক্টগুলির সাথে নিম্নলিখিতটি করতে পারেন।

Time.now.less(90, :days)


এই প্রকল্পটি দুই বছর ধরে আপডেট করা হয়নি এবং একক মন্তব্যে সমস্যাগুলি খোলা হয়েছে। এটা মৃত.
ব্যবহারকারী4674453

@ user4674453 সর্বশেষ আপডেটটি ছয় মাস আগে হয়েছিল। এটি একটি স্থিতিশীল গ্রন্থাগার যা এখনও রুবির সর্বশেষতম সংস্করণে কাজ করে। "মৃত" হিসাবে বিবেচনা না করার জন্য সমস্ত কোডবেসগুলিকে প্রতিদিন আপডেট করার দরকার নেই।
বিগুনটাকান


-1

সহজ সমাধান:

days90_ago = 90.days.ago.to_date.to_s

OUTPUT:
puts 90_days_ago
=> "2019-10-09" # considering cur_date: 2020-01-07

এটি অ্যাক্টিভসপোর্ট (রেলস) ব্যবহার করছে।
এস্পেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.