জাভাস্ক্রিপ্ট তারিখ অবজেক্টে ঘন্টা যুক্ত করা হচ্ছে?


399

এটি আমাকে অবাক করে দেয় যে জাভাস্ক্রিপ্টের তারিখ অবজেক্ট কোনও ধরণের অ্যাড ফাংশন বাস্তবায়ন করে না।

আমি কেবল একটি ফাংশন চাই যা এটি করতে পারে:

var now = Date.now();
var fourHoursLater = now.addHours(4);

function Date.prototype.addHours(h) {

   // how do I implement this?  

}

আমি কেবল কিছু দিক নির্দেশক চাই।

  • আমার কি স্ট্রিং পার্সিং করা দরকার?

  • আমি কি সেটটাইম ব্যবহার করতে পারি?

  • মিলিসেকেন্ড সম্পর্কে কীভাবে?

এটার মত:

new Date(milliseconds + 4*3600*1000 /*4 hrs in ms*/)?  

এটি যদিও সত্যিই হ্যাকিশ বলে মনে হচ্ছে - এবং এটি কি কাজ করে?

উত্তর:


422

জাভাস্ক্রিপ্ট নিজেই ভয়ানক তারিখ / সময় এপিআই এর আছে। তবুও, আপনি খাঁটি জাভাস্ক্রিপ্টে এটি করতে পারেন:

Date.prototype.addHours = function(h) {
  this.setTime(this.getTime() + (h*60*60*1000));
  return this;
}

একটি যাদুমন্ত্র মত কাজ করে! আপনাকে ধন্যবাদ
মোদিরাপন্টোকম

যদি আপনি বলে যে আপনি এটির পরের দিনটি ঘটাতে এক ঘন্টার যোগ করছেন, তবে এটি কি এটিকে ধরবে এবং সবকিছুকে সঠিকভাবে বৃদ্ধি করবে (দিন মাসের বছর)?
সিডোর্ন

@Cordern আমি মনে করি এটি আসবে, যেহেতু getTime () ফিরে আসবে মিলিসেকেন্ড এবং আপনি কেবল এতে আরও মিলিসেকেন্ড যুক্ত করবেন
The1993

370
Date.prototype.addHours= function(h){
    this.setHours(this.getHours()+h);
    return this;
}

টেস্ট:

alert(new Date().addHours(4));

25
আমি মনে করি না যে এটি কাজ করে --- উদাহরণস্বরূপ ২৩ ঘন্টা দিয়ে এটি পরীক্ষা করে? জেসন হারউইগের উত্তরটি আমার জন্য কী মনে হয়েছিল।
ডোমেনিক

11
জাভাস্ক্রিপ্টে কোনও অবজেক্ট প্রোটোটাইপগুলিতে জিনিস যুক্ত করা খারাপ অভ্যাস এবং ডোমেনিক সঠিক, এটি কাজ করে না। নীচে জেসন হারউইগের সমাধান আরও ভাল।
আইকোড

19
@ ডোমেনিক এটি 23:00 দিয়ে ফায়ারফক্স 10, ক্রোম 21 এবং আইই 8/9 এর জাভাস্ক্রিপ্ট কনসোলের অভ্যন্তরে পরীক্ষা করেছে, এখানে আমি যে কোডটি পরীক্ষা করতে ব্যবহার করেছি: var date = new Date(2012, 10, 22, 23, 0, 1); date.toString(); // Thu Nov 22 2012 23:00:01 GMT+0100 (CET) date.setHours(date.getHours() + 1); date.toString(); // Fri Nov 23 2012 00:00:01 GMT+0100 (CET) এটি সেটমাইনস ()
সাথেও

4
এই সমাধান নিয়ে সমস্যাগুলি ছড়িয়ে পড়ে - ডিএসটি চেঞ্জওভার পয়েন্টে আমার দ্বারা 1 দ্বারা বৃদ্ধি করা ব্যর্থ হয়েছিল (ঘড়ির এক ঘন্টা এগিয়ে যান)।
অ্যান্ড্রুব

2
এটির দ্বারাও কামড়ে ধরা হয়েছিল - আমি সেট ঘন্টাগুলি (getHours-1) ব্যবহার করে কয়েক ঘন্টার মধ্যে লুপিং করছিলাম: এখন, প্রথম ডিএসটি সময়ে, এটি একটি অসীম লুপ হিসাবে শেষ হয়। সুতরাং, ফলাফল চেক!
সিএফস্ট্রাস

165

নীচের কোডটি আজ অবধি 4 ঘন্টা যুক্ত করতে হবে (উদাহরণস্বরূপ আজকের তারিখ)

var today = new Date();
today.setHours(today.getHours() + 4);

যদি আপনি 4 থেকে 23 যোগ করার চেষ্টা করেন ( দস্তাবেজগুলি দেখুন ): এটি ত্রুটি সৃষ্টি করবে না :

আপনার নির্দিষ্ট করা প্যারামিটার যদি প্রত্যাশিত ব্যাপ্তির বাইরে থাকে তবে সেটহাউসগুলি () সেই অনুযায়ী তারিখ অবজেক্টে তারিখের তথ্য আপডেট করার চেষ্টা করে


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

ঘন্টাগুলি দশমিক (কোনও পূর্ণসংখ্যার নয়) কাজ করে বলে মনে হয় না
গ্রেগম্যাগডিটস

3
এটি এখানে সেরা উত্তর ... তারিখের প্রোটোটাইপের সাথে "অ্যাডওয়ার্স" যুক্ত করা উদ্বেগজনক কারণ কোনও কোনও সময়ে জেএস সেই ফাংশনের জন্য সমর্থন যোগ করতে পারে এবং তারপরে আপনার একটি বিরোধী প্রোটোটাইপ রয়েছে। এটি আপনাকে প্রায় যতটা কোড ব্যবহার করে একটি কার্যকারিতা দেয় gets
ক্রিস বয়েড

অবাক, তবে এটি আসলে বাড়ানোর দিনগুলি,
মাসগুলির প্রয়োজন

4
ঘন্টা মানগুলি ব্যবহার করার সময়> ২৩ এটিকে ভঙ্গ করে না, তবে এটি দিবালোকের সঞ্চয় সীমানায় ভেঙে গেছে । এটি ভেঙে দেওয়া হয়েছে, এটি ব্যবহার করার কোনও কারণ নেই; পছন্দ setTimeবা setUTCHour
মার্ক

40

অ্যাডহর্স পদ্ধতিটি প্যারামিটারটির পরিবর্তনের পরিবর্তে ডেট অবজেক্টের একটি অনুলিপি ফিরিয়ে অপরিবর্তনীয় করা আরও ভাল।

Date.prototype.addHours= function(h){
    var copiedDate = new Date(this.getTime());
    copiedDate.setHours(copiedDate.getHours()+h);
    return copiedDate;
}

এইভাবে আপনি রাষ্ট্রের উদ্বেগ ছাড়াই প্রচুর পদ্ধতিতে কল করতে পারেন।


এই ফাংশনটির এখানে একই সমস্যা রয়েছে যেমনটি এখানে বর্ণিত হয়েছে stackoverflow.com/questions/1050720/… এটি নির্দিষ্ট ব্রাউজারগুলিতে কাজ করে কিনা তা সম্পর্কে সত্যই নয়, তবে জাভাস্ক্রিপ্ট ব্যবহার করা অন্যান্য জায়গাগুলি এটিকে একটি সমস্যা হিসাবে দেখছে। আপনার সমাধানটি এই এক স্ট্যাকওভারফ্লো.
com

1
আপনার ফাংশনটির নাম পরিবর্তন করার বিষয়টি বিবেচনা করা উচিত, কারণ শব্দটি add*সাধারণত বস্তুটিকেই পরিবর্তিত করতে ব্যবহৃত হয়।
মিঃ 5

@ এমআর 5 - এটি সম্পর্কে নিশ্চিত নন, addনেট ডেস্কটপ DateTimeক্লাসে প্রচুর ব্যবহৃত হয় এবং ম্যাথে +(প্লাস) এর একই অর্থ রয়েছে ।
তাহির হাসান

1
currentDate.addHours(1)<- আমার প্রোগ্রামিং প্রবৃত্তি থেকে, আমি currentDateমানটি পরিবর্তনের প্রত্যাশা করছি , তবে আপনার বাস্তবায়নে এটি হবে না। কেন আমি এর নাম পরিবর্তিত করতে বা এর স্বাক্ষরটিকে কিছুতে পরিবর্তন করার পরামর্শ দিচ্ছি
মিঃ 5

1
@ তাহিরহসান কারিগরি বিবরণ নিয়ে কিছুই করার নয় তবে ফাংশন নামের জন্য সঠিক শব্দটি বেছে নেওয়ার ক্ষেত্রে। আমি এখনও চপল সংস্করণ যখন ফাংশন পূর্বনির্ধারিত পছন্দ করাadd
mr5

23

কেনেবেকের প্রস্তাবিত সংস্করণটি ডিএসটি-তে বা পরিবর্তিত হওয়ার পরে ব্যর্থ হবে, যেহেতু এটি নির্ধারিত সময়ের সংখ্যা।

this.setUTCHours(this.getUTCHours()+h);

যোগ হবে hঘন্টা thisসময় সিস্টেম নিজস্ব চালচলন স্বাধীন। জেসন হারউইগের পদ্ধতিটিও কাজ করে।


19

আপনি momentjs ব্যবহার করতে পারেন http://momentjs.com/ লাইব্রেরি।

var moment = require('moment');
foo = new moment(something).add(10, 'm').toDate();

7

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

Date.prototype.addHours= function(h){
    var copiedDate = new Date();
    copiedDate.setTime(this.getTime() + (h*60*60*1000)); 
    return copiedDate;
}

5

ডেটজস লাইব্রেরিতে একটি অ্যাড রয়েছে ।

এবং এখানে জাভাস্ক্রিপ্ট তারিখ পদ্ধতি আছে । কেনেবেকে বুদ্ধিমানভাবে getHours () এবং সেট ঘন্টাগুলি () উল্লেখ করেছেন;


নোট করুন যে গ্রন্থাগারটি আলফা স্থিতিতে উপস্থিত রয়েছে।
সাম 23

4

এটি ইতিমধ্যে সংজ্ঞায়িত না হয়েছে কিনা তা পরীক্ষা করুন, অন্যথায় এটি তারিখের প্রোটোটাইপে সংজ্ঞা দেয়:

if (!Date.prototype.addHours) {
    Date.prototype.addHours = function(h) {
        this.setHours(this.getHours() + h);
        return this;
    };
}

3

এটি পরিচালনা করার আরেকটি উপায় হ'ল তারিখটিকে ইউনিক্সটাইমে (যুগের সময়) রূপান্তর করা, তারপরে (মিলি) সেকেন্ডে সমতুল্য যোগ করুন, তারপরে আবার রূপান্তর করুন। এইভাবে আপনি দিন ও মাসের ট্রানজিশনগুলি হ্যান্ডেল করতে পারবেন, যেমন 21 ঘন্টা 4 ঘন্টা যোগ করার ফলস্বরূপ, পরের দিন, 01:00 এ ফলাফল হওয়া উচিত।


আপনি ঠিক বলেছেন - তবে আপনি কয়েক বছর দেরিও করেছেন। জেসন হারউইগের উত্তরটি আপনার 2 বছর আগে এই পদ্ধতিটি দেখিয়েছিল; এই উত্তর নতুন কিছু যোগ করে না।
মার্ক অ্যামেরি

3

জাভাস্ক্রিপ্টে একটি সাধারণ অ্যাড / বিয়োগ ঘন্টা / মিনিট ফাংশনের জন্য, এটি ব্যবহার করে দেখুন:

function getTime (addHour, addMin){
    addHour = (addHour?addHour:0);
    addMin = (addMin?addMin:0);
    var time = new Date(new Date().getTime());
    var AM = true;
    var ndble = 0;
    var hours, newHour, overHour, newMin, overMin;
    //change form 24 to 12 hour clock
    if(time.getHours() >= 13){
        hours = time.getHours() - 12;
        AM = (hours>=12?true:false);
    }else{
        hours = time.getHours();
        AM = (hours>=12?false:true);
    }
    //get the current minutes
    var minutes = time.getMinutes();
    // set minute
    if((minutes+addMin) >= 60 || (minutes+addMin)<0){
        overMin = (minutes+addMin)%60;
        overHour = Math.floor((minutes+addMin-Math.abs(overMin))/60);
        if(overMin<0){
            overMin = overMin+60;
            overHour = overHour-Math.floor(overMin/60);
        }
        newMin = String((overMin<10?'0':'')+overMin);
        addHour = addHour+overHour;
    }else{
        newMin = minutes+addMin;
        newMin = String((newMin<10?'0':'')+newMin);
    }
    //set hour
    if(( hours+addHour>=13 )||( hours+addHour<=0 )){
        overHour = (hours+addHour)%12;
        ndble = Math.floor(Math.abs((hours+addHour)/12));
        if(overHour<=0){
            newHour = overHour+12;
            if(overHour == 0){
                ndble++;
            }
        }else{
            if(overHour ==0 ){
                newHour = 12;
                ndble++;
            }else{
                ndble++;
                newHour = overHour;
            }
        }
        newHour = (newHour<10?'0':'')+String(newHour);
        AM = ((ndble+1)%2===0)?AM:!AM;
    }else{
        AM = (hours+addHour==12?!AM:AM);
        newHour = String((Number(hours)+addHour<10?'0':'')+(hours+addHour));
    }
    var am = (AM)?'AM':'PM';
    return new Array(newHour, newMin, am);
};

বর্তমান সময়টি পাওয়ার জন্য এটি পরামিতি ছাড়াই ব্যবহার করা যেতে পারে

getTime();

বা পরামিতিগুলির সাথে সময় যোগ করার জন্য যুক্ত মিনিট / ঘন্টা সহ

getTime(1,30); // adds 1.5 hours to current time
getTime(2);    // adds 2 hours to current time
getTime(0,120); // same as above

এমনকি নেতিবাচক সময় কাজ করে

getTime(-1, -30); // subtracts 1.5 hours from current time

এই ফাংশনটি একটি অ্যারের প্রদান করে

array([Hour], [Minute], [Meridian])

কোনও ফাংশনটির এই 56-লাইনের দানবটির শীর্ষ-ভোট প্রাপ্ত উত্তরের দ্বি-লাইন পদ্ধতির উপরে কী লাভ আছে ? -1 কারণ এখানে কোনও সুবিধার জন্য আমি দেখতে পাচ্ছি না এখানে অতিরিক্ত অতিরিক্ত জটিলতা রয়েছে।
মার্ক অ্যামেরি

1

এসপিআরবিএনএন সঠিক is মাস এবং বছরের শুরুতে / হিসাবের জন্য অ্যাকাউন্ট করতে, আপনাকে ইপচ এবং ফিরে রূপান্তর করতে হবে।

আপনি এটি কীভাবে করেন তা এখানে:

var milliseconds = 0;          //amount of time from current date/time
var sec = 0;                   //(+): future
var min = 0;                   //(-): past
var hours = 2;
var days = 0;

var startDate = new Date();     //start date in local time (we'll use current time as an example)

var time = startDate.getTime(); //convert to milliseconds since epoch

//add time difference
var newTime = time + milliseconds + (1000*sec) + (1000*60*min) + (1000*60*60*hrs) + (1000*60*60*24)

var newDate = new Date(newTime);//convert back to date; in this example: 2 hours from right now


অথবা এটি একটি লাইনে করুন (যেখানে পরিবর্তনশীল নামগুলি উপরের মত একই:

var newDate = 
    new Date(startDate.getTime() + millisecond + 
        1000 * (sec + 60 * (min + 60 * (hours + 24 * days))));

0

এটি বর্ধিত বা হ্রাসকৃত ডেটা মান পাওয়ার সহজ উপায়।

const date = new Date()
const inc = 1000 * 60 * 60 // an hour
const dec = (1000 * 60 * 60) * -1 // an hour

const _date = new Date(date)
return new Date( _date.getTime() + inc )
return new Date( _date.getTime() + dec )

-1

কিছুটা অগোছালো, কিন্তু কাজ করে!

এর মতো তারিখের ফর্ম্যাট দেওয়া হয়েছে: 2019-04-03T15: 58

  //Get the start date.
  var start = $("#start_date").val();
  //Split the date and time.
  var startarray = start.split("T");
  var date = startarray[0];
  var time = startarray[1];

  //Split the hours and minutes.
  var timearray = time.split(":");

  var hour = timearray[0];
  var minute = timearray[1];
  //Add an hour to the hour.
  hour++;
  //$("#end_date").val = start;
  $("#end_date").val(""+date+"T"+hour+":"+minute+"");

আপনার আউটপুটটি হবে: 2019-04-03T16: 58

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