রুবি / রেলস: একটি তারিখকে ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করা


202

আমি কীভাবে একটি রেলস অ্যাপ্লিকেশনটিতে একটি ডেট অবজেক্ট থেকে একটি ইউনিক্স টাইমস্ট্যাম্প (১৯ 1970০ GMT থেকে সেকেন্ডের সংখ্যা) পাব?

আমি জানি যে Time#to_iএকটি টাইমস্ট্যাম্প ফিরে আসে, কিন্তু কাজটি করে Date#to_timeএবং তারপরে টাইমস্ট্যাম্পের ফলাফল প্রায় এক মাসের মধ্যে বন্ধ হয়ে যায় (কেন তা নিশ্চিত নয় ...)।

কোন সাহায্য প্রশংসা করা হয়, ধন্যবাদ!

সম্পাদনা: ঠিক আছে, আমি মনে করি আমি এটি খুঁজে পেয়েছি several আমি একটি লুপে বেশ কয়েকবার একটি তারিখ প্রক্রিয়া করছিলাম, এবং প্রতিটি সময় সময় অঞ্চলটির অমিলের কারণে তারিখটি খানিকটা সরানো হয়েছিল, শেষ পর্যন্ত আমার টাইমস্ট্যাম্পটি এক মাসের জন্য বন্ধ হয়ে যায়। তবুও, আমি নির্ভর না করে এটি করার কোনও উপায় আছে কিনা তা জানতে আগ্রহী হব Date#to_time

উত্তর:


350

কোডটি date.to_time.to_iঠিকঠাক কাজ করা উচিত। নীচে রেলস কনসোল সেশন একটি উদাহরণ দেখায়:

>> Date.new(2009,11,26).to_time
=> Thu Nov 26 00:00:00 -0800 2009
>> Date.new(2009,11,26).to_time.to_i
=> 1259222400
>> Time.at(1259222400)
=> Thu Nov 26 00:00:00 -0800 2009

মনে রাখবেন যে মধ্যবর্তী তারিখটাইম অবজেক্টটি স্থানীয় সময়, তাই টাইমস্ট্যাম্পটি আপনি যা প্রত্যাশা করেন তার থেকে কয়েক ঘন্টা ছুটি থাকতে পারে। আপনি যদি ইউটিসির সময় কাজ করতে চান, আপনি ডেটটাইমের পদ্ধতি "টু_ট্যাক" ব্যবহার করতে পারেন।


3
ডেটটাইম নেইto_utc
সবুজ

12
date.to_time.utcসম্ভবত তার অর্থ কি
অ্যাডাম এবারলিন 25'13

3
রেলগুলিতে, অ্যাক্টিভসপোর্টের মাধ্যমে, একটি ডেটটাইম উদাহরণে একটি ইউটিসি () পদ্ধতি থাকে (এছাড়াও গিটটকের সাথেও আলাদা হয়)
গোকুল

71

চেষ্টা করার পরে আমি নিম্নলিখিতগুলি পাই:

>> Date.today.to_time.to_i
=> 1259244000
>> Time.now.to_i
=> 1259275709

এই দুটি সংখ্যার মধ্যে পার্থক্য হ'ল Dateবর্তমান সময়ের ঘন্টা, মিনিট বা সেকেন্ড সঞ্চয় করে না এমন কারণে । এটিকে একটিতে রূপান্তরিত Dateকরার Timeফলস্বরূপ সেদিন, মধ্যরাত।


9

স্থানীয় সময় অফসেট ব্যবহার to_utcবা utcঠিক করার প্রস্তাবিত বিকল্পগুলি কার্যকর হয় না। আমার জন্য আমি Time.utc()সঠিকভাবে কাজ করে দেখেছি এবং কোডটিতে কম পদক্ষেপ জড়িত:

> Time.utc(2016, 12, 25).to_i
=> 1482624000 # correct

বনাম

> Date.new(2016, 12, 25).to_time.utc.to_i
=> 1482584400 # incorrect

আপনি যখন ইউটিসি ব্যবহারের পরে কল করবেন তখন এখানে কী ঘটে Date...

> Date.new(2016, 12, 25).to_time
=> 2016-12-25 00:00:00 +1100 # This will use your system's time offset
> Date.new(2016, 12, 25).to_time.utc
=> 2016-12-24 13:00:00 UTC

... তাই পরিষ্কার কলিং to_iভুল টাইমস্ট্যাম্প দিতে চলেছে।


8

রুবি 1.8 এর সমাধান যখন আপনার একটি স্বেচ্ছাসেবী ডেটটাইম অবজেক্ট থাকে:

1.8.7-p374 :001 > require 'date'
 => true 
1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
 => "1326585600"

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