জাভাস্ক্রিপ্টে গতকাল তারিখ গণনা করুন


278

জাভাস্ক্রিপ্টে তারিখ হিসাবে আমি গতকাল কীভাবে গণনা করতে পারি ?

উত্তর:


457
var date = new Date();

date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)

date.setDate(date.getDate() - 1);

date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)

12
খুশী হলাম। প্রথম নজরে, এটি মনে হতে পারে যে getDateএটি মাসের দিন (যেমন: 1 - 31) হিসাবে ফেরত হিসাবে ব্যর্থ হবে তবে আসলে setDate(0)আগের মাসের শেষ দিনটিতে তারিখটি সেট করে। এটি কি সমস্ত ব্রাউজার জুড়ে কাজ করে?
ড্রয় নোকস

1
"সমস্ত" ব্রাউজারগুলি যাচাই করতে পারেন নি তবে camo.githubusercontent.com/…
জেমস

1
@ জারগোল্ড আপনার অর্থ কী বোঝেন না। নোড - রূপান্তর v9.4.0 নোড কনস্টের তারিখ = নতুন তারিখ () অপরিশোধিত> তারিখ.আই.এস.আইএস.এস.টিং () '2018-02-10T16: 26: 30.821Z'> তারিখ.সেটেট (তারিখ.সেট তারিখ () - 1) 1518193590821> তারিখ .toISOString () '2018-02-09T16: 26: 30.821Z'
জেমস

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

91

খুব দক্ষ নয়, তবে অনলাইনার হিসাবে:

var yesterday = new Date(new Date().setDate(new Date().getDate()-1));

উপরোক্ত তিনটি Dateঅবজেক্ট তৈরি করে যা অপ্রয়োজনীয়ভাবে অপচয়যোগ্য। এটি এর সাথে একক ইনস্ট্যান্টেশনে হ্রাস করা যেতে পারে:

var yesterday = (function(){this.setDate(this.getDate()-1); return this})
                  .call(new Date)

বা, যদি আপনি পছন্দ করেন:

var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)

অথবা, আপনি যদি তীর ফাংশন সহ ES6 পছন্দ করেন:

let yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);

6
আমি সুযোগটি নিয়ে গোলযোগ এড়াতে পছন্দ করব:var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
রায় টিঙ্কার

4
আপনার যদি ওয়ান-লাইনার প্রয়োজন হয় তবে নতুন তারিখ (তারিখ.নো () - 24 * 60 * 60 * 1000) এর মতো কিছু ব্যবহার করুন; এটিতে কেবল একটি তারিখ অবজেক্ট তৈরি করার সুবিধা রয়েছে। তবে সত্যই, যে কেউ এই কোডটি বজায় রাখছেন তিনি তার চেয়ে স্পষ্ট 2-লাইনের সংস্করণ দেখতে আরও বেশি খুশী হবেন যেহেতু তারা (অথবা এই বিষয়ে মিলি সেকেন্ড) চারপাশে কিছু ছুঁড়ে ফেলেছে।
রব হিলান


60

আশ্চর্যজনকভাবে সহজ ক্রস ব্রাউজার সমাধানের কোনও উত্তর পয়েন্ট নেই

গতকাল ঠিক একই সময়ে সন্ধান করতে:

var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000

এটি যদি আপনি নির্ভরতা মুক্ত রাখতে চান, অন্যথায় আমি http://momentjs.com ব্যবহার করার পরামর্শ দেব


7
দিবালোকের সঞ্চয় পরিবর্তিত হলে কীভাবে এই কাজ করবে? এটি কি এক ঘন্টা এগিয়ে / পিছনে বাধা দেবে না?
অ্যাডাম তেগেন

19

প্রশ্নটি সাধারণ করতে এবং অন্যান্য পৃথক গণনাগুলি ব্যবহার করতে:

var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);

এটি একটি পূর্ণসংখ্যার হিসাবে "এখন" এর মানের উপর ভিত্তি করে একটি নতুন তারিখের অবজেক্ট তৈরি করে যা একদিনের বিয়োগফলকে মিলিসেকেন্ডে ইউনিক্সের যুগের প্রতিনিধিত্ব করে।

দুই দিন আগে:

var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);

এক ঘন্টা আগে:

var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);

আমরা মিলিসেকেন্ডের ক্ষেত্রে প্রকাশিত ইউনিক্স যুগের উপর কাজ করছি বলে এটি নিরাপদ পদ্ধতি বলে মনে হচ্ছে। সুতরাং পাটিগণিতটি getDate () - 1 এর মতো কিছু করার চেয়ে নিরাপদ। আমি getDate () - 1 চেষ্টা করিনি, তবে getDate () এর নথিভিত্তিক ভিত্তিতে আজকের তারিখটি কোনও মাসের প্রথম তারিখ হলে এটি 1 ফিরে আসবে। এবং 1-1 = 0 কোনও বৈধ তারিখ নয়। সেটেটেট (0) কীভাবে কাজ করবে তা নিশ্চিত নয়।
কপিল পেন্ডসে

1
এটি আমার পদ্ধতির ছিল, যদিও আপনি এটি কিছুটা সহজ করতে পারেন - নতুন তারিখ (তারিখ.নো () - 24 * 60 * 60 * 1000) এর মতো কিছু চেষ্টা করুন;
রব হিলান

সেটডেট (0), বিটিডব্লিউ, ভাল হবে - এটি আগের মাসের শেষ দিনটিতে উল্টে যাবে। তবে এখানে মিলিসেকেন্ডের উপস্থাপনা ছেড়ে দেওয়া পরিপাটি (এবং আরও স্বজ্ঞাগত) বলে মনে হচ্ছে - আমার এক দিকটি হ'ল "একদিনে মিলিস সংখ্যা" এতটা সুস্পষ্ট নয়, সুতরাং সেই গণনাটি ভুল টাইপ করা সহজ হতে পারে।
রব হিলান

ইউনিক্স সময়ের সাথে কাজ করা আরও নির্ভরযোগ্য বিকল্পের মতো বলে মনে হচ্ছে। এটি উচ্চতর রেটিং করা উচিত।
পল

হ্যাঁ, আমি এই পদ্ধতির সেরা পছন্দ। অস্পষ্টতা কম আছে। আমি সাথে যেতে শেষ new Date(Date.parse(new Date()) - 86400000)। যদিও আমি ডেট.নো () পছন্দ করি তাই এর পরিবর্তে আমি চেষ্টা করব। এটি একটি অতিরিক্ত তারিখ সংরক্ষণ করবে।
coblr

9

আমি মুহুর্তের গ্রন্থাগারটি ব্যবহার করি এটি অত্যন্ত নমনীয় এবং সহজেই ব্যবহারযোগ্য।

তোমার ক্ষেত্রে:

let yesterday = moment().subtract(1, 'day').toDate();

2
আপনি এর subtractপরিবর্তে আরও ভাল ব্যবহার করতে চানadd
টমাস আইয়ুব

খুব ভাল কাজ করে! এনজি ফুলক্যালেন্ডার এবং তার বৈধ র্যাঞ্জের জন্য দুর্দান্ত কাজ
জেনোএক্স


7
//Create a date object using the current time
var now = new Date();

//Subtract one day from it
now.setDate(now.getDate()-1);

6

var today = new Date();
var yesterday1 = new Date(new Date().setDate(new Date().getDate() - 1));
var yesterday2 = new Date(Date.now() - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date((new Date()).valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);


5

এটি গতকাল 00:00 মিনিটে নির্ভুলতার সাথে উত্পাদন করবে

var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);

2
d.setHours(0,0,0,0);

কৌতুক করবে


1
এটা হবে? আমি ভেবেছিলাম এটি কেবল আপনার ঘন্টা, মিনিট এবং সেকেন্ড 0 তে সেট করেছে, কিন্তু আসলে কী তারিখটি পরিবর্তন করে না?
জেস্পার বাইলন্ড

আমি ঋণাত্মক সংখ্যা ব্যবহার করতে গতকাল পেতে ছিল: d.setHours(-1,0,0,0)। এটি গতকালের তারিখটিতে ফিরে আসবে, তবে আপনি যে সময় চান তা হতে পারে না (23:00:00)
cs_pupil

1

এটি ব্যবহার করে দেখুন, আমার জন্য কাজ করে:

var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `

এটি আমার কাছে গতকাল তারিখের জন্য ফিরে আসে


1
যেহেতু আপনি আজ.সেট তারিখ ব্যবহার করছেন তাই আজকের দিনটি গতকালও বদলে যাবে। গতকাল পরিবর্তনশীল তৈরি করা এবং তারপরে এটি সেট করা ভাল। var yesterday = new Date(); yesterday.setDate(today.GetDate() - 1)যাতে আপনি আজ এবং গতকাল উভয়ই ব্যবহার করতে পারেন
পার্সেইজ্যাক

1

এখানে একটি লাইন রয়েছে যা পাঠ্যটিতে ওয়াইওয়াইওয়াই-এমএম-ডিডি ফর্ম্যাটে গতকালের তারিখ পেতে এবং টাইমজোন অফসেট পরিচালনা করতে ব্যবহৃত হয়।

new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]

এটি যথাযথভাবে x দিন আগে ফিরে আসার তারিখে পরিবর্তিত হতে পারে। সময় ইত্যাদি অন্তর্ভুক্ত করা

console.log(Date())
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]); // "2019-11-11"
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0].replace('T',' ')); // "2019-11-11 11:11:11"

// that is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000    // this is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000


0

আপনি যদি উভয়ই গতকালের জন্য তারিখ পেতে চান এবং সেই তারিখটিকে মানব পাঠযোগ্য বিন্যাসে ফর্ম্যাট DateHelperকরতে চান তবে এমন একটি কাস্টম অবজেক্ট তৈরি করার বিষয়টি বিবেচনা করুন :

var DateHelper = {
    addDays : function(aDate, numberOfDays) {
        aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
        return aDate;                                  // Return the date
    },
    format : function format(date) {
        return [
           ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
           ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
           date.getFullYear()                          // Get full year
        ].join('/');                                   // Glue the pieces together
    }
}

// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Subtract 1 day
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -1));

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


0

আপনি এই মুহুর্তগুলি ব্যবহার করতে পারেন এটি খুব সহায়ক আপনি এই লাইব্রেরির সাহায্যে অনেক কিছু অর্জন করতে পারেন।

বর্তমান সময়ের সাথে গতকাল তারিখ পান moment().subtract(1, 'days').toString()

তারিখ শুরুর সাথে গতকাল তারিখ পান moment().subtract(1, 'days').startOf('day').toString()


0

সীমা তারিখের সমস্যা সমাধান করুন (2020, 01, 01) -> 2019, 12, 31

var now = new Date();
return new Date(now.getMonth() - 1 === 0 ? now.getFullYear() - 1 : now.getFullYear(),
                now.getDate() - 1 === 0 ? now.getMonth() - 1: now.getMonth(),
                now.getDate() - 1);

-1

"তারিখ.নো () - 86400000" দিবালোক সংরক্ষণের শেষ দিনে (যেদিনের 25 ঘন্টা থাকে) কাজ করবে না

আর একটি বিকল্প বন্ধ ব্যবহার করা হয়:

var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.