কীভাবে সেকেন্ডগুলিকে এইচএইচ: মিমি: এসএস এ মুহূর্তে রূপান্তর করবেন


94

আমি কীভাবে সেকেন্ডে রূপান্তর করতে পারি HH:mm:ss?

এই মুহুর্তে আমি নীচের ফাংশনটি ব্যবহার করছি

render: function (data){
     return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}

এটি ক্রোমে কাজ করে তবে ফায়ারফক্সে 12 সেকেন্ডের জন্য আমি 01:00:12 ক্রস ব্রাউজারের সামঞ্জস্যের জন্য moment.js ব্যবহার করতে চাই

আমি এটি চেষ্টা করেছিলাম কিন্তু কাজ করে না

render: function (data){
         return moment(data).format('HH:mm:ss');
}

আমি কি ভুল করছি?

সম্পাদনা

আমি moment.js ছাড়াই একটি সমাধান খুঁজে পেতে পরিচালিত যা নিম্নলিখিত হিসাবে রয়েছে

return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];

আমি কীভাবে মুহূর্তে এটি করতে পারি তা সম্পর্কে আগ্রহী



@ এমপ্লুংজন আমি ইতিমধ্যে সেই পোস্টটি পড়েছি বলে উল্লেখ না করার জন্য দুঃখিত। আমাকে কয়েক মিলিয়ন সারি সহ একটি টেবিল রেন্ডার করতে হবে এবং সমাধানটি খুব ধীর গতির আছে। দ্বিতীয় উত্তরটি হ'ল আমি আমার প্রশ্নে যা লিখেছি তা কিন্তু
ফায়ার ফক্সে

4
@ কুইন্টিনট্যানিওআর্টিনো তাই 4 টি তুচ্ছ গণিত অপারেটর লক্ষ লক্ষ উপাদানগুলির জন্য ডিওএমকে পরিবর্তন করার জন্য একটি সমস্যা? আপনি কি নিশ্চিত যে আপনি কার্য সম্পাদন সমস্যাটি সঠিকভাবে বুঝতে পেরেছেন?
জেরকামস

@ জারকামস আমি জানি যে আমার ডিএও ক্লাসগুলিতে ইতিমধ্যে রূপান্তরিত ডেটা পরিবেশন করতে আবার লিখতে হবে। এটি এমন একটি বিষয় যা আমি সচেতন। বলেছিলেন যে আমি আমার প্রথম প্রচেষ্টার বর্তমান পারফরম্যান্সে বেশ খুশি তবে যখন আমি রূপান্তরটির জন্য আমার কাছে 5 টি গণিতের ক্রিয়াকলাপ হয় যা সিস্টেমটি কিছুটা ধীর করে দেয়। হ্যাঁ আমি আপনার সাথে একমত হয়েছি যে এটি কেবল একটি দ্রুত
সাম্প্রতিক

@ কুইন্টিনটানিয়োর্টিনো "যা সিস্টেমকে কিছুটা ধীর করে দেয়" --- "কিছুটা" আপনি পারফরম্যান্স সম্পর্কে কীভাবে যুক্তি দেখান তা নয়। এটা কি কোনও বাধা? এটি কি কোনও বাধা প্রমাণিত ? যদি তা না হয় - এই খুব অপারেশনটি অনুকূল করতে আপনাকে কী চালিত করে?
zerkms

উত্তর:


81

লিপ সমস্যা এড়াতে এই পোস্টটি থেকে চেষ্টা করব

moment("2015-01-01").startOf('day')
    .seconds(s)
    .format('H:mm:ss');

আমি জেএসফিউর চালাইনি, তবে আমি মনে করব এটি নতুন তারিখের অবজেক্টটি মিলিয়ন বার তৈরি করার চেয়ে দ্রুত

function pad(num) {
    return ("0"+num).slice(-2);
}
function hhmmss(secs) {
  var minutes = Math.floor(secs / 60);
  secs = secs%60;
  var hours = Math.floor(minutes/60)
  minutes = minutes%60;
  return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
  // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers
}


4
অনেক অনেক ধন্যবাদ, খুব চতুর সমাধান
কিজিএ

4
দ্বিতীয়টি, এটি অত্যন্ত দ্রুত
কিজিএ

4
আপনি এটি দ্বিতীয় উদাহরণে করতে পারেন: ফিরুন [ঘন্টা, মিনিট, সেকেন্ড] f ফিল্টার (t => টি) ma ম্যাপ (প্যাড) jজাইন (":")
ওনো ফ্যাবার

@ অন্নোফ্যাবার আপনার কাছে কী দ্রুত বলে মনে হয়? সংক্ষিপ্তকরণ বা একটি ফিল্টার প্লাস একটি মানচিত্র? আমরাও করতে পারি`${pad(hours)}:${pad(minutes)}:${pad(secs)}`
এমপ্লুংজন

পূর্ববর্তী সমস্ত উত্তর থেকে, সবচেয়ে সহজ হ'ল এমপ্লুজন এর মধ্যে একটি , তবে এটিতে একটি ত্রুটি রয়েছে যা এলোমেলো সংখ্যা দেখায় যদি মানটি মিলি সেকেন্ডে থাকে (উদাহরণস্বরূপ: 17.3 গুলি)। তার কোডের ভিত্তিতে, আমি নিম্নলিখিত প্রস্তাব করছি: ফাংশন প্যাড (num) num রিটার্ন ("0" + num)। স্লাইস (-2); } / ** * @ রিটার্ন {স্ট্রিং} * / রফতানি ডিফল্ট ফাংশন রেন্ডারউসারটাইম (সেকেন্ড) {মিনিটগুলি = ম্যাথ.ফ্লোয়ার (সেকেন্ড / 60); কনস্ট আউটপুটসেকস = ম্যাথ.াউন্ড (সেকেন্ড% 60); লেট আওয়ারস = ম্যাথ.ফ্লুর (মিনিট / 60); কনস্ট আউটপুটমিনুটস = ​​ম্যাথ.াউন্ড (মিনিট% 60); ফিরুন `$ {প্যাড (ঘন্টা)}: $ {প্যাড (আউটপুটমিআই
আলবার্তো সোটো

98

এটি অন্য পোস্ট থেকে রেফারেন্স করা এমপ্লুংজান সদৃশ, তবে আরও সংক্ষিপ্ত:

const secs = 456;

const formatted = moment.utc(secs*1000).format('HH:mm:ss');

document.write(formatted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

এটি একই সতর্কতায় ভুগছে, উদাহরণস্বরূপ, যদি সেকেন্ডগুলি এক দিনের (86400) অতিক্রম করে, আপনি যা আশা করেন তা পাবেন না।


4
আপনাকে ধন্যবাদ, আমি মনে করি এটি খুব সাধারণ প্রয়োজন, মুহুর্তের জন্য একটি টানুন অনুরোধটি খুলুন theyjs তাদের এটি যুক্ত করা উচিত।
মরিস এস

ধন্যবাদ @ সোফি খুব কম জায়গাগুলিতে ইউটিসি () উল্লেখ করা হয়েছে, যা আমার ক্ষেত্রে ঠিক তেমন দরকার ছিল।
pmont

25

আপনি মুহূর্ত-সময়কাল-বিন্যাস প্লাগইন ব্যবহার করতে পারেন :

var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40
<!-- Moment.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

<!-- moment-duration-format plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

এই ফিডলটিও দেখুন

আপডেট: 60-সেকেন্ডের চেয়ে কম মানের ব্যবহারের জন্য ট্রিমিং এড়ানোর জন্য { trim: false }:

var formatted = duration.format("hh:mm:ss", { trim: false }); // "00:00:05"

এমন একটি বাণিজ্য রয়েছে যা আপনার উত্তর এবং @ সোফির উত্তর দিয়ে দেখা উচিত। প্রযুক্তিগতভাবে আপনার সমাধানটি "সময়" সময়কালে hh: মিমি: এসএস হিসাবে প্রদর্শন করবে তবে এর জন্য অতিরিক্ত প্লাগইন প্রয়োজন। সোফি হ'ল: মিমি: এসএসে ফর্ম্যাট করা সময়ের বর্তমান বিন্দু থেকে একটি "তারিখ"। আপনি যদি সোফির "ইউটিসি" সরিয়ে ফেলেন তবে এটি ভুল তথ্য ফিরে আসতে পারে যেহেতু এটি মহাকাব্যটিকে তারিখ হিসাবে ব্যবহার করে এবং বর্তমান পয়েন্টটিকে সময় হিসাবে ব্যবহার করে না। উভয় উত্তর কাজ করে। চিন্তাভাবনা করার এবং বোঝার জন্য কেবল কিছু।
মাইকেল

এখানে সিডিএন ব্যবহার করার সময় এবং কী কীভাবে বর্ধিত বিলম্বকে বাড়িয়ে তুলতে পারে, সাধারণত "নিজেকে অন্য লাইব্রেরি সহ" নেতিবাচক ট্রেড অফ বনাম বনাম বাস্তবায়ন কোড হিসাবে ভাবা বিপজ্জনক। এটি এমন একটি ফাঁদ যা আমি দেখতে পাচ্ছি অনেক বিকাশকারীই পড়ে এবং শেষ পর্যন্ত কম রক্ষণাবেক্ষণযোগ্য কোডের সাথে শেষ হয়ে যায়।
cytinus

কোনও কারণে যদি সেকেন্ড <60 হয় তবে এটি কেবল
বিনা বিন্যাসে

@ ড্যানিয়েললিজিক, কেবল {ছাঁটাই: মিথ্যা add যুক্ত করুন} উদাঃ সময়কাল.ফর্ম্যাট ("এইচএইচ: মিমি: এসএস", {ছাঁটাই: মিথ্যা});
ওলেক্সি ক্যাচেন্সস্কি

16
var seconds = 2000 ; // or "2000"
seconds = parseInt(seconds) //because moment js dont know to handle number in string format
var format =  Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();

1

Moment.js সময়কাল সঠিকভাবে কীভাবে ব্যবহার করবেন? | কোডগুলিতে moment.duration () ব্যবহার করুন

প্রথমত, আপনাকে আমদানি করতে হবে momentএবং moment-duration-format

import moment from 'moment';
import 'moment-duration-format';

তারপরে, সময়কালীন ফাংশনটি ব্যবহার করুন। আসুন উপরের উদাহরণটি প্রয়োগ করুন: 28800 = সকাল 8 টা।

moment.duration(28800, "seconds").format("h:mm a");

- ওয়েল, আপনার উপরের ধরণের ত্রুটি নেই। Amআপনি 8:00 টায় একটি সঠিক মান পাবেন? না…, আপনি যে মান পাবেন তা 8:00 এ। মোমেন্ট.জেএস ফর্ম্যাটটি যেমন অনুমিত হয় তেমন কাজ করে না।

- সমাধানটি হ'ল সেকেন্ডকে মিলি সেকেন্ডে রূপান্তর করা এবং ইউটিসি সময় ব্যবহার করা।

moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')

ঠিক আছে, আমরা এখন সকাল 8:00। আপনি যদি অবিচ্ছেদ্য সময়ের জন্য সকাল 8:00 এর পরিবর্তে সকাল 8 টা চান তবে আমাদের RegExp করা দরকার

const time = moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a');
time.replace(/:00/g, '')

1

24 ঘন্টা পর্যন্ত যেমনটি Duration.formatমূহুর্তে, @@২.২৩.০ সহ অবচিত করা হয়েছে

const seconds = 123;
moment.utc(moment.duration(seconds,'seconds').as('milliseconds')).format('HH:mm:ss');

1

সেকেন্ড (সংখ্যা) স্ট্রিং ফর্ম্যাটে পরিবর্তনের জন্য আমার সমাধান (উদাহরণস্বরূপ: 'মিমি: এসএস'):

const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');

উদাহরণস্বরূপ 'এস' এর পরিবর্তে আপনার সেকেন্ড লিখুন । এবং আপনার যেখানে প্রয়োজন সেখানে কেবল 'ফর্ম্যাটড সেকেন্ডস' ব্যবহার করুন।

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