মানব-বান্ধব আপেক্ষিক তারিখ বিন্যাসের জন্য জাভাস্ক্রিপ্ট লাইব্রেরি [বন্ধ]


95

আমি মানব-বান্ধব বিন্যাসে বর্তমান তারিখের তুলনায় কিছু তারিখ প্রদর্শন করতে চাই।

মানব-বান্ধব আপেক্ষিক তারিখগুলির উদাহরণ:

  • 10 সেকেন্ড আগে
  • এখন থেকে 20 মিনিট
  • 1 দিন আগে
  • 5 সপ্তাহ আগে
  • ২ মাস আগে

মূলত বিশ্বস্ততার সাথে সর্বোচ্চ মাত্রার সর্বোচ্চ অর্ডার সংরক্ষণ করা (এবং পছন্দ অনুসারে, কেবলমাত্র সেই ইউনিটগুলির মধ্যে ২ টি পাস করার সময় ইউনিট স্থানান্তরিত হবে - 1 মাসের পরিবর্তে 5 সপ্তাহ))

যদিও আমি এমন একটি লাইব্রেরি নিয়ে থাকতে পারি যার নিয়ন্ত্রণ কম ছিল এবং আরও বন্ধুত্বপূর্ণ তারিখগুলি ছিল:

  • গতকাল
  • আগামীকাল
  • গত সপ্তাহে
  • কিছু মিনিট আগে
  • কয়েক ঘন্টা

এর জন্য কোন জনপ্রিয় গ্রন্থাগার?


"1 দিন আগে" কেন আসল তারিখ এবং সময়কে উপস্থাপন করার চেয়ে আরও বেশি "মানব বান্ধব"?
রবজি

5
@ রবজি আমি বলব যে এটি প্রাসঙ্গিকগুলির স্যুইচিং এড়ানো সম্পর্কে আরও বেশি কিছু eg ডেটা সারণীতে, সেই ফর্ম্যাটটি ব্যবহার করা আরও পঠনযোগ্য হতে পারে। এটি পাঠকের তারিখটির সাথে কী করা দরকার তার উপরও নির্ভর করে যেমন "" এটি n দিন আগে ঘটেছিল "বা" 1/1/1972 এর আগে এটি ঘটেছে "কার্যক্ষম বা অন্যথায় পাঠকের প্রসঙ্গে উপযুক্ত কিনা।
wprl

সম্ভবত, তবে "গতকাল ... 3 দিন আগে ... 10 / মে ..." হিসাবে ইভেন্টের একটি তালিকা দেখে বিভ্রান্তি ঘটে। সেগুলি কখন ঘটেছিল তার একটি ছবি পেতে আমার এখনও তাদের সমস্তকে আমার মাথার তারিখগুলিতে রূপান্তর করতে হবে। তারিখগুলি সংক্ষিপ্ত এবং সুনির্দিষ্ট, "সময় পূর্বে" মানগুলি কথোপকথনের, যথার্থতার অভাব এবং সাধারণত সম্পর্কিত তারিখের সাথে কেবল সহায়ক। সম্ভবত এটি কেবল আমি, কিন্তু নাও হতে পারে। :-)
রবজি 16'13

6
আমি বলব এটি প্রসঙ্গে নির্ভর করে। সর্বোপরি, আপনি যদি বলবেন না যে "আমি 17 ফেব্রুয়ারী 2014 এ মাছ ধরতে গিয়েছিলাম" যদি এটি আসলে গতকালই ছিল। মস্তিষ্কের আরও কিছু বিরতি রয়েছে সেখানে। এই ধরণের পাঠ্য সাম্প্রতিক ইভেন্টগুলির তালিকার জন্য উপযুক্ত।
সাইমন উইলিয়ামস

4
@ রবজি কেবল আমাদের মতো নার্ভরা এমনটি ভাবেন যে সাধারণ মানুষ নয়।

উত্তর:


94

যেহেতু আমি এই উত্তরটি লিখেছি, একটি সুপরিচিত গ্রন্থাগারটি moment.js


এখানে গ্রন্থাগারগুলি উপলভ্য রয়েছে তবে এটি নিজে প্রয়োগ করা তুচ্ছ। কেবলমাত্র কয়েকটা শর্ত ব্যবহার করুন।

ধরে নিন যে সময়ের সাথে আপনি তুলনা করতে চান তার জন্য dateএকটি তাত্ক্ষণিক Dateবস্তু।

// Make a fuzzy time
var delta = Math.round((+new Date - date) / 1000);

var minute = 60,
    hour = minute * 60,
    day = hour * 24,
    week = day * 7;

var fuzzy;

if (delta < 30) {
    fuzzy = 'just then.';
} else if (delta < minute) {
    fuzzy = delta + ' seconds ago.';
} else if (delta < 2 * minute) {
    fuzzy = 'a minute ago.'
} else if (delta < hour) {
    fuzzy = Math.floor(delta / minute) + ' minutes ago.';
} else if (Math.floor(delta / hour) == 1) {
    fuzzy = '1 hour ago.'
} else if (delta < day) {
    fuzzy = Math.floor(delta / hour) + ' hours ago.';
} else if (delta < day * 2) {
    fuzzy = 'yesterday';
}

ভবিষ্যতের তারিখগুলি পরিচালনা করতে আপনার এটিকে অভিযোজিত করতে হবে।


9
গতকাল গত মধ্যরাতের আগে, ২৪ ঘন্টা থেকে ৪৮ ঘন্টা আগে নয়।
এমএক্সসিএল

@ এম্মাক্লাউরিন মাইন কখনই সম্পূর্ণ সমাধান হিসাবে বোঝানো হয়নি, কেবল সঠিক দিকে একটি পয়েন্টার। এটি পরে আপডেট করার জন্য আমি একটি নোট তৈরি করব, অথবা আপনি চাইলে উত্তরটি সম্পাদনা করতে দ্বিধা বোধ করবেন।
অ্যালেক্স

ডেট-এফএনএস এও দয়া করে দেখুন ! আপনি যদি আপনার কোড বেসটি ছোট রাখতে চান তবে এটি একটি দুর্দান্ত গ্রন্থাগার, কারণ এতে মুহুর্তের চেয়ে অনেক কম পায়ের ছাপ রয়েছে!
মেসেখ

4
আমি এই কোডটি টুইটার শৈলীর getTimeAgoফাংশন করতে পেরেছি gist.github.com/pomber/6195066a9258d1fb93bb59c206345b38
পোমার

88

আমি moment.js লিখেছি , একটি তারিখ পাঠাগার যা এটি করে। এটি প্রায় 5KB (2011) 52KB (2019), এবং ব্রাউজারগুলিতে এবং নোডে কাজ করে। এটি সম্ভবত জাভাস্ক্রিপ্টের জন্য সর্বাধিক জনপ্রিয় এবং বিখ্যাত তারিখের গ্রন্থাগার।

এটি টাইমগো, ফর্ম্যাটিং, পার্সিং, অনুসন্ধান, ম্যানিপুলেটিং, আই 18 এন ইত্যাদি সমর্থন করে

অতীতের তারিখগুলির জন্য টাইমাগো (আপেক্ষিক সময়) সম্পন্ন হয় moment().fromNow()। উদাহরণস্বরূপ, টাইমগো বিন্যাসে 1 জানুয়ারী, 2019 দেখানোর জন্য:

let date = moment("2019-01-01", "YYYY-MM-DD");
console.log(date.fromNow());
<script src="https://momentjs.com/downloads/moment.min.js"></script>

টাইমগো স্ট্রিংগুলি কাস্টমাইজযোগ্য moment.updateLocale(), যাতে আপনি কীভাবে ফিট দেখতে পারেন সেগুলি পরিবর্তন করতে পারেন।

কাট অফগুলি প্রশ্নটি অনুরোধ করে না ("5 সপ্তাহ" বনাম "1 মাস"), তবে কোন স্ট্রিংটি কোন সময়ের জন্য ব্যবহৃত হয় তা নথিভুক্ত করা হয়।


4
এটি ব্রাউজার এবং নোডে কাজ করার জন্য !!!!
wprl

50
হা যে আকার আপডেট যদিও!
Askdesigners

4
ডেট-এফএনএস এও দয়া করে দেখুন ! আপনি যদি আপনার কোড বেসটি ছোট রাখতে চান তবে এটি একটি দুর্দান্ত গ্রন্থাগার, কারণ এতে মুহুর্তের চেয়ে অনেক কম পায়ের ছাপ রয়েছে!
মেসেখ

এই লাইব্রেরিটি যতটা ভাল, উত্তরে এটি কোনও মানব-বান্ধব উপায়ে ব্যবহার করে কোনও সংখ্যাকে কীভাবে ফর্ম্যাট করা যায় তার একটি ব্যাখ্যা অন্তর্ভুক্ত নয়
কোড হুইস্পেরার

আপনি কি "অবচয়" দিয়ে খুব আপডেট করতে চলেছেন? momentjs.com/docs/#/- প্রকল্প- স্ট্যাটাস
জুয়ান দে লা ক্রুজ

17

জন রেসিগের কিছু এখানে - http://ejohn.org/blog/javascript- ব্যাখ্যা date/

সম্পাদনা (6/27/2014): সুমুরাই 8 এর মন্তব্যে অনুসরণ করা - যদিও লিঙ্কযুক্ত পৃষ্ঠাটি এখনও কাজ করে pretty.jsতবে উপরের নিবন্ধটি থেকে লিঙ্কযুক্ত অংশটি এখানে দেওয়া হয়েছে :

pretty.js

/*
 * JavaScript Pretty Date
 * Copyright (c) 2011 John Resig (ejohn.org)
 * Licensed under the MIT and GPL licenses.
 */

// Takes an ISO time and returns a string representing how
// long ago the date represents.
function prettyDate(time) {
    var date = new Date((time || "").replace(/-/g, "/").replace(/[TZ]/g, " ")),
        diff = (((new Date()).getTime() - date.getTime()) / 1000),
        day_diff = Math.floor(diff / 86400);

    if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31) return;

    return day_diff == 0 && (
    diff < 60 && "just now" || diff < 120 && "1 minute ago" || diff < 3600 && Math.floor(diff / 60) + " minutes ago" || diff < 7200 && "1 hour ago" || diff < 86400 && Math.floor(diff / 3600) + " hours ago") || day_diff == 1 && "Yesterday" || day_diff < 7 && day_diff + " days ago" || day_diff < 31 && Math.ceil(day_diff / 7) + " weeks ago";
}

// If jQuery is included in the page, adds a jQuery plugin to handle it as well
if (typeof jQuery != "undefined") jQuery.fn.prettyDate = function() {
    return this.each(function() {
        var date = prettyDate(this.title);
        if (date) jQuery(this).text(date);
    });
};

ব্যবহার:

prettyDate("2008-01-28T20:24:17Z") // => "2 hours ago"
prettyDate("2008-01-27T22:24:17Z") // => "Yesterday"
prettyDate("2008-01-26T22:24:17Z") // => "2 days ago"
prettyDate("2008-01-14T22:24:17Z") // => "2 weeks ago"
prettyDate("2007-12-15T22:24:17Z") // => undefined

ব্যবহারের নিবন্ধ থেকে অংশ:

ব্যবহারের উদাহরণ

নিম্নলিখিত উদাহরণগুলিতে আমি সাইটের সমস্ত অ্যাঙ্কর তৈরি করি, যার একটি শিরোনাম রয়েছে যার একটি তারিখ রয়েছে, তাদের অভ্যন্তরীণ পাঠ্য হিসাবে সুন্দর তারিখ রয়েছে। অতিরিক্তভাবে, পৃষ্ঠাটি লোড হওয়ার পরে আমি প্রতি 5 সেকেন্ডে লিঙ্কগুলি আপডেট করতে থাকি।

জাভাস্ক্রিপ্ট সহ:

function prettyLinks(){
    var links = document.getElementsByTagName("a");
    for ( var i = 0; i < links.length; i++ )
        if ( links[i].title ) {
            var date = prettyDate(links[i].title);
            if ( date )
                links[i].innerHTML = date;
        }
}
prettyLinks();
setInterval(prettyLinks, 5000);

JQuery সহ:

$("a").prettyDate();
setInterval(function(){ $("a").prettyDate(); }, 5000);

ফয়েজ: মূল কোড, বাগ ফিক্স এবং উন্নতিতে কিছু পরিবর্তন হয়েছে।

function prettyDate(time) {
    var date = new Date((time || "").replace(/-/g, "/").replace(/[TZ]/g, " ")),
        diff = (((new Date()).getTime() - date.getTime()) / 1000),
        day_diff = Math.floor(diff / 86400);
    var year = date.getFullYear(),
        month = date.getMonth()+1,
        day = date.getDate();

    if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31)
        return (
            year.toString()+'-'
            +((month<10) ? '0'+month.toString() : month.toString())+'-'
            +((day<10) ? '0'+day.toString() : day.toString())
        );

    var r =
    ( 
        (
            day_diff == 0 && 
            (
                (diff < 60 && "just now")
                || (diff < 120 && "1 minute ago")
                || (diff < 3600 && Math.floor(diff / 60) + " minutes ago")
                || (diff < 7200 && "1 hour ago")
                || (diff < 86400 && Math.floor(diff / 3600) + " hours ago")
            )
        )
        || (day_diff == 1 && "Yesterday")
        || (day_diff < 7 && day_diff + " days ago")
        || (day_diff < 31 && Math.ceil(day_diff / 7) + " weeks ago")
    );
    return r;
}

4
হাই ফ্লয়েড, আমি আপনার উত্তরে কিছু পরিবর্তন (বাগ ফিক্স, উন্নতি) যুক্ত করেছি। আশা করি আপনি কিছু আপত্তি করবেন না ..
ফয়েজ

ভাল একটা! তবে টাইমস্ট্যাম্পের সংখ্যাসূচক প্রকারের সাথে কাজ করবেন না, হতে পারে এর চেয়ে ভাল ফিল্টারের প্রয়োজন হতে পারে (টাইপফোন টাইম == 'স্ট্রিং') {সময় = টাইম.রেপ্লেস (/ - / জি, "/ ")। রিপ্লেস //selTZ// জি, "")); }
আর্থার আরাজাতো

দয়া করে, ভবিষ্যতের তারিখগুলি কীভাবে অ্যাকাউন্ট করবেন? এখন থেকে 2 দিনের মত।
ইকেন্না এমান

15

সুগার.জেএস এর দুর্দান্ত তারিখের ফর্ম্যাটিং ফাংশন রয়েছে।

কেবল তা-ই নয়, এটি স্ট্রিং ফর্ম্যাটিং, নম্বর ফর্ম্যাটিং ইত্যাদি সাধারণ সাধারণ কার্যকারিতা সরবরাহ করে যা ব্যবহার করা সুবিধাজনক।


4
সম্মত হন, সুগার.জেএস এখানে বেশি মনোযোগের দাবি রাখে।
সিটিকিড

5

এখানে চিনি বনাম মুহুর্তের একটি উদাহরণ: সপ্তাহে প্রদর্শিত একটি ক্যালেন্ডারের জন্য, আমার শেষ সোমবারের মানটি প্রয়োজন:

moment.js

var m = moment().subtract("days", 1).sod().day(1) // returns a "moment"

sugar.js

var d = Date.past("monday") // returns a js Date object

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

ও.পি. কেসগুলি উভয় লিবেই আচ্ছাদিত, চিনির জন্য। js দেখুন http://sugarjs.com / তারিখগুলি


4

এই জেএস স্ক্রিপ্টটি খুব সুন্দর। আপনাকে যা করতে হবে তা হ'ল এটি চালানো। সমস্ত <time>ট্যাগ আপেক্ষিক তারিখগুলিতে পরিবর্তিত হবে এবং প্রতি কয়েক মিনিটে আপডেট হবে, তাই আপেক্ষিক সময় সর্বদা আপ টু ডেট থাকবে।

http://timeago.yarp.com/


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

4

আপনার মত শব্দগুলি http://www.datejs.com/ ব্যবহার করতে পারে

মূল পৃষ্ঠায় তাদের উদাহরণ রয়েছে যা আপনি যা বর্ণনা করছেন ঠিক তেমন করে!

সম্পাদনা: আসলে, আমি মনে করি আমি আপনার প্রশ্নটি আমার মাথায় উল্টে দিয়েছি। যাই হোক না কেন, আমি মনে করি এটি যেহেতু এটি সত্যিই দুর্দান্ত লাইব্রেরি হিসাবে আপনি এটি পরীক্ষা করে দেখতে পারেন!

এক্স 2 সম্পাদনা করুন: অন্যরা যা বলেছে তা আমি প্রতিধ্বনিত করতে চলেছি http://momentjs.com/ সম্ভবত এখনই সেরা পছন্দ।

সম্পাদনা এক্স 3: আমি এক বছরেরও বেশি সময় ধরে ডেট.জেস ব্যবহার করি নি। আমি আমার সমস্ত তারিখ সম্পর্কিত প্রয়োজনের জন্য একচেটিয়াভাবে মুহুর্তগুলি ব্যবহার করছি।


ভাল ইচ্ছার পরামর্শ। আন্তর্জাতিকীকরণ অবশ্যই একটি প্লাস।
স্টিফেন

ডেট.জেএসটিও আমার প্রথম চিন্তা ছিল, তবে এটির সাথে সংখ্যায় ফর্ম্যাট করার কোনও উপায় আমি দেখতে পাচ্ছি না - যদিও এটি কোনও জায়গায় ডক্সে লুকিয়ে থাকতে পারে।
রায়পুম

ডেট.জেএস-এ গুরুতর বাগ রয়েছে বলে জানা যায় এবং উত্পাদন পরিবেশে বিশ্বাস করা যায় না। অনেক ফ্রেমওয়ার্কগুলি ডেট.জেস থেকে মোমেন্ট.জেএস এ স্যুইচ করছে
জন জাব্রোস্কি

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