मैं जावास्क्रिप्ट में एक तिथि से मिनट कैसे घटा सकता हूं?


133

मैं इस छद्म कोड को काम करने वाले js में कैसे अनुवाद कर सकता हूं [चिंता न करें कि अंतिम तिथि कहां से आती है सिवाय इसके कि यह एक मान्य जावास्क्रिप्ट तिथि है]।

var myEndDateTime = somedate;  //somedate is a valid js date  
var durationInMinutes = 100; //this can be any number of minutes from 1-7200 (5 days)

//this is the calculation I don't know how to do
var myStartDate = somedate - durationInMuntes;

alert("The event will start on " + myStartDate.toDateString() + " at " + myStartDate.toTimeString());

जवाबों:


199

एक बार जब आप यह जानते हैं:

  • आप 1 जनवरी, 1970 से निर्माणकर्ता को मिलीसेकंड के साथ Dateकॉल करके बना सकते हैं ।
  • valueOf()एक Date1 जनवरी, 1970 के बाद से मिलीसेकेंड की संख्या है
  • 60,000एक मिनट में मिलीसेकंड होते हैं : -]

... यह इतना मुश्किल नहीं है।

नीचे दिए गए कोड में, Dateमिलीसेकंड की उचित संख्या को घटाकर एक नया बनाया जाता है myEndDateTime:

var MS_PER_MINUTE = 60000;
var myStartDate = new Date(myEndDateTime - durationInMinutes * MS_PER_MINUTE);

6
जब आप मिनट जोड़ते हैं तो संभाल नहीं करता है। मिनट जोड़ने पर सही ढंग से संभालने के लिए, आपको उपयोग करना चाहिए .getTime()। उदाहरण:var myStartDate = new Date(myEndDateTime.getTime() + durationInMinutes * MS_PER_MINUTE);
गैब्रियल एल। ओलिवेरा

आप यह भी उपयोग कर सकते हैं var myStartDate = somedate.addMinutes(-durationInMuntes);मुझे लगता है कि किसी दिन एक वस्तु है
kubahaha

1
यह काम करता है ... लेकिन एक सवाल है कि दिनांक () निर्माता के पास 3 विकल्प हैं, अर्थात 1: खाली 2: स्ट्रिंग और 3: संख्या वर्ष, संख्या महीना .... इसलिए ऊपर इस्तेमाल किया जा रहा है जो किस निर्माता का है?
जफर


उदाहरण के लिए कि यह कैसे गलत हो सकता है, यूरोप / लंदन का समय क्षेत्र के रूप में उपयोग करते हुए: var d = new Date("2017-10-29 01:50:00"), e = new Date(d.getTime() + 20 * 60000);आप सही eहोने की उम्मीद करेंगे 02:10:00? नहीं। 01:10:00। DST कहता है हाय। और फिर लीप-सेकंड्स हैं ...
नीट द डार्क एबसोल

81

आप इसे प्राप्त करने के लिए मिनट सेट और सेट का उपयोग भी कर सकते हैं:

var endDate = somedate;

var startdate = new Date(endDate);

var durationInMinutes = 20;

startdate.setMinutes(endDate.getMinutes() - durationInMinutes);

52
यह ध्यान देने योग्य है कि setMinutes()नकारात्मक मिनटों को सही ढंग से संभालने के लिए पर्याप्त स्मार्ट है। इसलिए यदि प्रारंभ दिनांक 3:05 थी, और आप 30 मिनट घटाना चाहते हैं, तो आप -25सेटइन्यूट्स () में पास होंगे, जो यह जानने के लिए पर्याप्त स्मार्ट 3:-25है 2:35। (यानी यह एक अपवाद नहीं है।)
किप

2
@ किप - धन्यवाद, वह अंतर्दृष्टि है जो इस उत्तर को सार्थक बनाती है। लेकिन क्या सभी ब्राउज़र इसकी गारंटी देते हैं? मैं पूछता हूं क्योंकि एमडीएन केवल 0 - 59 की अनुमति देता है - लेकिन मुझे संदेह है कि डॉक्स इस मामले में सिर्फ गलत हैं? देखें: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
जस्टिन एथिएर

यह मेरे लिए अधिक उपयोगी था, मैं मौजूदा डेट ऑब्जेक्ट इंस्टेंस से समय को घटाना चाहता था जो कि एक विशेष तरीके से कंस्ट्रक्टर के माध्यम से सेट किया गया था। धन्यवाद!
बिल एफिन मरे

1
बस याद रखें कि .setMinutes(...)बल intमानों को संभालते हैं। यदि आप इसे सेट 1.5 minutesकरते हैं तो Dateयह केवल सेट करेगा 1 minuteऔर सेकंड को पहले जैसा ही रखेगा।
गेब्रियल एल। ओलिवेरा

एक समान उपयोग के मामले में मुझे गलत मान मिल रहा था जब मैंने शुरुआत की कोशिश की = endDate। समस्या की तरह लग रहा है जहां एक उथली प्रतिलिपि होती है
raghav710

35

सब कुछ सिर्फ टिक्स है, तरीकों को याद करने की आवश्यकता नहीं है ...

var aMinuteAgo = new Date( Date.now() - 1000 * 60 );

या

var aMinuteLess = new Date( someDate.getTime() - 1000 * 60 );

अपडेट करें

क्षणिकाओं के साथ काम करने के बाद, मेरा कहना है कि यह एक अद्भुत पुस्तकालय है जिसे आपको देखना चाहिए। यह सच है कि टिक आपके कोड को बहुत छोटा बनाने के कई मामलों में काम करता है और आपको अपने कोड को जितना संभव हो उतना छोटा बनाने की कोशिश करनी चाहिए। लेकिन कुछ भी जटिल के लिए ,jjs का उपयोग करें।


2
IMO यह इतना आसान नहीं है। यह कोड डिक्रिप्ट करने के लिए कुछ प्रयास करता है कि यह कोड वास्तव में क्या करता है। बेहतर तरीका यह है कि किसी फ़ंक्शन में उस तरह के तर्क को लपेटें।
sszarek

12

date.js में तारीख वस्तुओं में हेरफेर करने के लिए कुछ बहुत अच्छी सुविधा विधियां हैं

.Subtract विधि, आप एक तारीख से समय की इकाइयों की एक निश्चित राशि घटाना, राशि और एक TIMEUNIT स्ट्रिंग प्रदान करके अनुमति देता है।

var now = new Date();
// Sun Jan 22 2017 17:12:18 GMT+0200 ...
var olderDate = moment(now).subtract(3, 'minutes').toDate();
// Sun Jan 22 2017 17:09:18 GMT+0200 ...

6

यह है जो मैंने पाया:

//First, start with a particular time
var date = new Date();

//Add two hours
var dd = date.setHours(date.getHours() + 2);

//Go back 3 days
var dd = date.setDate(date.getDate() - 3);

//One minute ago...
var dd = date.setMinutes(date.getMinutes() - 1);

//Display the date:
var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var date = new Date(dd);
var day = date.getDate();
var monthIndex = date.getMonth();
var year = date.getFullYear();
var displayDate = monthNames[monthIndex] + ' ' + day + ', ' + year;
alert('Date is now: ' + displayDate);

सूत्रों का कहना है:

http://www.javascriptcookbook.com/article/Perform-date-manipulations-based-on-adding-or-subtracting-time/

https://stackoverflow.com/a/12798270/1873386


5
var date=new Date();

//here I am using "-30" to subtract 30 minutes from the current time.
var minute=date.setMinutes(date.getMinutes()-30); 

console.log(minute) //it will print the time and date according to the above condition in Unix-timestamp format.

आप new Date().for उदाहरण का उपयोग करके यूनिक्स टाइमस्टैम्प को पारंपरिक समय में बदल सकते हैं

var extract=new Date(minute)
console.log(minute)//this will print the time in the readable format.

मैंने कुछ प्रारूपण परिवर्तन किए हैं। कृपया सुनिश्चित करें कि यह अभी भी दर्शाता है कि आपने क्या पोस्ट किया है।
अदिगा

1

नीचे के रूप में प्रयास करें:

var dt = new Date();
dt.setMinutes( dt.getMinutes() - 20 );
console.log('#####',dt);

0

यह वही है जो मैंने किया था: कोडपेन पर देखें

var somedate = 1473888180593;
var myStartDate;
//var myStartDate = somedate - durationInMuntes;

myStartDate = new Date(dateAfterSubtracted('minutes', 100));

alert("The event will start on " + myStartDate.toDateString() + " at " + myStartDate.toTimeString());

function dateAfterSubtracted(range, amount){
    var now = new Date();
    if(range === 'years'){
        return now.setDate(now.getYear() - amount);
    }
    if(range === 'months'){
        return now.setDate(now.getMonth() - amount);
    }
    if(range === 'days'){
        return now.setDate(now.getDate() - amount);
    }
    if(range === 'hours'){
        return now.setDate(now.getHours() - amount);
    }
    if(range === 'minutes'){
        return now.setDate(now.getMinutes() - amount);
    }
    else {
        return null;
    }
}

ओपी का उपयोग नहीं करते हैं new Date(), लेकिन कुछ निर्दिष्ट तिथि है, और केवल घटाव मिनट के बारे में पूछा है। इसके अलावा, आपका कोड काम नहीं करता है - यह दिनांक ऑब्जेक्ट के बजाय UNIX टाइमस्टैम्प लौटाता है।
मिचेल पेरोलाकोव्स्की

0

इस फ़ंक्शन के साथ दिनांक वर्ग बढ़ाएँ

// Add (or substract if value is negative) the value, expresed in timeUnit
// to the date and return the new date.
Date.dateAdd = function(currentDate, value, timeUnit) {

    timeUnit = timeUnit.toLowerCase();
    var multiplyBy = { w:604800000,
                     d:86400000,
                     h:3600000,
                     m:60000,
                     s:1000 };
    var updatedDate = new Date(currentDate.getTime() + multiplyBy[timeUnit] * value);

    return updatedDate;
};

तो आप किसी भी तिथि में कई मिनट, सेकंड, घंटे, दिन जोड़ या घटा सकते हैं।

add_10_minutes_to_current_date = Date.dateAdd( Date(), 10, "m");
subs_1_hour_to_a_date = Date.dateAdd( date_value, -1, "h");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.