UTC दिनांक को 'YYYY-MM-DD hh: mm: ss` string के रूप में NodeJS का उपयोग कैसे करें?


242

NodeJS का उपयोग करते हुए, मैं Dateनिम्नलिखित स्ट्रिंग प्रारूप में प्रारूपित करना चाहता हूं :

var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");

मैं उसको कैसे करू?


4
यह किसी भी पुस्तकालयों के बिना करने के लिए एक परेशान की तरह है। मैं खजूर
पीटर ओल्सन



टेंपस ने शानदार काम किया। विज्ञापन के मुद्दे आएंगे।
तंपा

1
न तो Datejs और न ही Tempus नोड पुस्तकालय हैं (हालांकि वे नोड के साथ इस्तेमाल किया जा सकता है आप npm लाइब्रेरी इंस्टॉलर का उपयोग नहीं कर सकते हैं)। जैसा कि किसी ने भी वास्तविक उत्तरों के रूप में नहीं डाला है, मैंने इसे स्वयं किया है।
जूलियन नाइट

जवाबों:


531

यदि आप Node.js का उपयोग कर रहे हैं, तो आपके पास EcmaScript 5 होना निश्चित है, और इसलिए दिनांक में एक toISOStringविधि है। आप ISO8601 के एक मामूली संशोधन के लिए पूछ रहे हैं:

new Date().toISOString()
> '2012-11-04T14:51:06.157Z'

तो बस कुछ चीजों में कटौती करें, और आप सेट हैं:

new Date().toISOString().
  replace(/T/, ' ').      // replace T with a space
  replace(/\..+/, '')     // delete the dot and everything after
> '2012-11-04 14:55:45'

या, एक पंक्ति में: new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')

ISO8601 आवश्यक रूप से UTC है (पहले परिणाम पर अनुगामी Z द्वारा इंगित किया गया है), इसलिए आप डिफ़ॉल्ट रूप से UTC प्राप्त करें (हमेशा एक अच्छी बात)।


4
चतुर और सरल समाधान जो पुस्तकालयों के उपयोग से बचा जाता है - अच्छा!
विंगमैन

11
यदि आपको त्रुटि मिलती है, Object has no method 'toISOString'तो आप चूक गएnew
allenhwkim

29
एक बात का ध्यान रखें कि नियमित अभिव्यक्ति का उपयोग करना इस तरह से धीमा है और आपको यहां उनकी आवश्यकता भी नहीं है, यह new Date().toISOString().replace('T', ' ').substr(0, 19)ठीक काम करता है।
किल्लाह

2
ध्यान दें कि समय क्षेत्र को हटाकर, यह अब एक अलग ऑफसेट के साथ हर समय क्षेत्र में समय के एक अलग क्षण का प्रतिनिधित्व करता है।
रॉब

1
@RobG आप कह सकते हैं कि किसी भी तारीख समय प्रतिनिधित्व के बारे में जिसमें स्पष्ट समय क्षेत्र नहीं है।
फिल

105

UPDATE 2017-03-29: जोड़ा गया दिनांक- fns, मोमेंट और डेटज पर कुछ नोट्स
UPDATE 2016-09-14: जोड़ा गया सुगरजेज़ जिसमें कुछ उत्कृष्ट तिथि / समय के कार्य हैं।


ठीक है, क्योंकि किसी ने वास्तव में वास्तविक जवाब नहीं दिया है, यहां मेरा है।

एक पुस्तकालय निश्चित रूप से मानक तरीके से तारीखों और समय को संभालने के लिए सबसे अच्छा दांव है। तारीख / समय की गणना में बहुत सारे किनारे मामले हैं इसलिए यह एक पुस्तकालय के विकास को हाथ से निकालने में सक्षम होने के लिए उपयोगी है।

यहाँ मुख्य नोड संगत समय प्रारूपण पुस्तकालयों की एक सूची है:

  • Moment.js [ मुस्तफा का धन्यवाद ] "पार्सिंग, मैनिपुलेट करने, और प्रारूपण की तारीखों के लिए एक हल्की (4.3k) जावास्क्रिप्ट डेट लाइब्रेरी" - इसमें अंतर्राष्ट्रीयकरण, गणना और सापेक्ष तिथि प्रारूप शामिल हैं - अपडेट 2017-03-29 : काफी हल्का-वजन नहीं किसी भी अधिक लेकिन फिर भी सबसे व्यापक समाधान, खासकर यदि आपको टाइमज़ोन समर्थन की आवश्यकता है।
  • तारीख- fns [ जोड़ा गया 2017-03-29, Fractalf के लिए धन्यवाद ] छोटे, तेज, मानक जेएस तारीख वस्तुओं के साथ काम करता है। अगर आपको टाइमज़ोन समर्थन की आवश्यकता नहीं है, तो मोमेंट के लिए बढ़िया विकल्प।
  • सुगरजस - बिल्ट-इन ऑब्जेक्ट प्रकार के जावास्क्रिप्शंस में बहुत आवश्यक सुविधाओं को जोड़ने वाला एक सामान्य सहायक पुस्तकालय। कुछ उत्कृष्ट दिखने की तारीख / समय क्षमताएं शामिल हैं।
  • strftime - बस यही कहता है, अच्छा और सरल
  • dateutil - यह मैं MomentJS से पहले इस्तेमाल किया है
  • नोड formatdate
  • TimeTraveller - "टाइम ट्रैवलर तारीखों से निपटने के लिए उपयोगिता विधियों का एक सेट प्रदान करता है। स्वरूपण से जोड़ने और घटाना करने के लिए। टाइम ट्रैवलर वैश्विक नाम स्थान को प्रदूषित किए बिना केवल डेट ऑब्जेक्ट्स को बढ़ाता है।"
  • टेंपस [दान डी के लिए धन्यवाद] - अद्यतन: यह नोड के साथ भी इस्तेमाल किया जा सकता है और एनपीएम के साथ तैनात किया जा सकता है, डॉक्स देखें

गैर-नोड पुस्तकालय भी हैं:

  • Datejs [पीटर ओल्सन को धन्यवाद] - npm या GitHub में पैक नहीं किया गया, इसलिए नोड के साथ उपयोग करने के लिए इतना आसान नहीं है - वास्तव में अनुशंसित नहीं जैसा कि 2007 से अपडेट नहीं किया गया है!

2
यह भी अत्यधिक प्रासंगिक तारीख है-fns.org ( github.com/date-fns/date-fns )
फ्रैक्टालफ

मोमेंट के पीछे के लोक में लक्सॉन
alxndr

धन्यवाद @alxndr, एक उपयोगी रिबूट जैसा दिखता है।
जूलियन नाइट

पल + रनोसिटिंग () रनकीट पर: runkit.com/shanekenyon87/5b845b0a64ab3f0012c9c607
शेन


45

मेरे पास सामान्य रूप से पुस्तकालयों के खिलाफ कुछ भी नहीं है। इस मामले में एक सामान्य प्रयोजन पुस्तकालय ओवरकिल लगता है, जब तक कि आवेदन प्रक्रिया के अन्य भागों में भारी तारीख न हो।

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

function dateFormat (date, fstr, utc) {
  utc = utc ? 'getUTC' : 'get';
  return fstr.replace (/%[YmdHMS]/g, function (m) {
    switch (m) {
    case '%Y': return date[utc + 'FullYear'] (); // no leading zeros required
    case '%m': m = 1 + date[utc + 'Month'] (); break;
    case '%d': m = date[utc + 'Date'] (); break;
    case '%H': m = date[utc + 'Hours'] (); break;
    case '%M': m = date[utc + 'Minutes'] (); break;
    case '%S': m = date[utc + 'Seconds'] (); break;
    default: return m.slice (1); // unknown code, remove %
    }
    // add leading zero if required
    return ('0' + m).slice (-2);
  });
}

/* dateFormat (new Date (), "%Y-%m-%d %H:%M:%S", true) returns 
   "2012-05-18 05:37:21"  */

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

8
यह String.replace () पद्धति, रचनात्मकता के लिए +1 का बहुत अच्छा उपयोग है
जेमीजैग

5
नहीं। बिल्कुल इस मामले में एक पुस्तकालय का उपयोग करें। स्वरूप बदल सकता है। यहां तक ​​कि अगर यह नहीं बदलता है, तो यह कोड में जटिलता जोड़ रहा है। आपके कोड को बनाए रखने वाले अन्य लोगों को समय बिताना होगा, इस फ़ंक्शन को समझने और यह सुनिश्चित करने की कोशिश करनी चाहिए कि यह सही है। व्यायाम स्कूल के लिए हैं; सवाल वास्तविक जीवन के उपयोग के बारे में था। जब तक, ज़ाहिर है, यह आपकी पहली या दूसरी "वास्तविक" परियोजना है; फिर ऐसा कुछ करना अच्छा हो सकता है, इसलिए आप सीख सकते हैं कि आपको भविष्य में ऐसा क्यों नहीं करना चाहिए।
osa

3
मैं पुस्तकालयों को साबित / लड़ाई-कठोर कोड के रूप में उपयोग करने की सामान्य भावना की सराहना करता हूं लेकिन वे तैनाती की जटिलता को भी जोड़ सकते हैं। यह कोड सभी कैलेंडर से संबंधित सूक्ष्मताओं को अंतर्निहित दिनांक ऑब्जेक्ट पर भेजता है और उचित स्थान पर गेटआउट () विधि जैसे उदाहरण के लिए कॉल करता है। इसके अतिरिक्त, अगर किसी को इस कोड में बग का पता चलता है, तो वे इसे stackoverflow.com पर रिपोर्ट कर सकते हैं, अनिवार्य रूप से किसी भी अन्य पुस्तकालय के कई-आंखों / उथले-बग पहलुओं से मेल खाते हैं। +1
स्टीमर 25

11

किसी भी पुस्तकालय के उपयोग के बिना अपने इच्छित प्रारूप में टाइमस्टैम्प प्राप्त करने के लिए आसानी से पठनीय और अनुकूलन योग्य तरीका:

function timestamp(){
  function pad(n) {return n<10 ? "0"+n : n}
  d=new Date()
  dash="-"
  colon=":"
  return d.getFullYear()+dash+
  pad(d.getMonth()+1)+dash+
  pad(d.getDate())+" "+
  pad(d.getHours())+colon+
  pad(d.getMinutes())+colon+
  pad(d.getSeconds())
}

(यदि आपको UTC प्रारूप में समय की आवश्यकता है, तो बस फ़ंक्शन कॉल को बदलें। उदाहरण के लिए "getMonth" "getUTConth" बन जाता है)


9

जावास्क्रिप्ट लाइब्रेरी sugar.js ( http://sugarjs.com/ ) में तिथियों को प्रारूपित करने के कार्य हैं

उदाहरण:

Date.create().format('{dd}/{MM}/{yyyy} {hh}:{mm}:{ss}.{fff}')

3
बहुत ही शानदार लाइब्रेरी लगती है। उनका प्रारूपण बहुत ही धीमा है, और उनके डॉक्स सौ अन्य चीजों का सुरुचिपूर्ण समाधान दिखाते हैं जिन्हें मैंने जावास्क्रिप्ट में निराश किया है। यह एक कोशिश देने जा रहे हैं।
ईमजेंटहाट

6

दिनांक ऑब्जेक्ट में प्रदान की गई विधि का उपयोग इस प्रकार करें:

var ts_hms = new Date();

console.log(
    ts_hms.getFullYear() + '-' + 
    ("0" + (ts_hms.getMonth() + 1)).slice(-2) + '-' + 
    ("0" + (ts_hms.getDate())).slice(-2) + ' ' +
    ("0" + ts_hms.getHours()).slice(-2) + ':' +
    ("0" + ts_hms.getMinutes()).slice(-2) + ':' +
    ("0" + ts_hms.getSeconds()).slice(-2));

यह वास्तव में गंदा दिखता है, लेकिन इसे जावास्क्रिप्ट कोर विधियों के साथ ठीक काम करना चाहिए


2
मैं मानता हूं कि जनवरी से वापस आने के बाद आपको 1 महीने के लिए getMonth () को जोड़ना होगा, लेकिन मुझे नहीं लगता कि आप getDate () में 1 जोड़ना चाहते हैं।
स्टीव ओनोराटो

5

मैं Nodejs और angularjs में डेटफॉर्मेट का उपयोग कर रहा हूं, इसलिए अच्छा है

इंस्टॉल

$ npm install dateformat
$ dateformat --help

डेमो

var dateFormat = require('dateformat');
var now = new Date();

// Basic usage
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");
// Saturday, June 9th, 2007, 5:46:21 PM

// You can use one of several named masks
dateFormat(now, "isoDateTime");
// 2007-06-09T17:46:21

// ...Or add your own
dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"';
dateFormat(now, "hammerTime");
// 17:46! Can't touch this!

// You can also provide the date as a string
dateFormat("Jun 9 2007", "fullDate");
// Saturday, June 9, 2007
...

3
new Date(2015,1,3,15,30).toLocaleString()

//=> 2015-02-03 15:30:00

StackOverflow में आपका स्वागत है। कृपया अपना उत्तर संपादित करें, या आप नीचे मतदान कर सकते हैं। जैसा कि अभी है, यह बिना किसी संदर्भ के सिर्फ एक सुझाव है। कैसे एक अच्छा जवाब लिखने के लिए कृपया यहाँ देखें ।
jacefarm

यह डी-लोकेल (इसलिए टोलकालेस्ट्रिंग) के साथ होता है:3.2.2015, 15:30:00
alwe

2

वैकल्पिक # 6233…।

स्थानीय समय में यूटीसी ऑफसेट जोड़ें फिर इसे ऑब्जेक्ट की toLocaleDateString()विधि के साथ वांछित प्रारूप में परिवर्तित करें Date:

// Using the current date/time
let now_local = new Date();
let now_utc = new Date();

// Adding the UTC offset to create the UTC date/time
now_utc.setMinutes(now_utc.getMinutes() + now_utc.getTimezoneOffset())

// Specify the format you want
let date_format = {};
date_format.year = 'numeric';
date_format.month = 'numeric';
date_format.day = '2-digit';
date_format.hour = 'numeric';
date_format.minute = 'numeric';
date_format.second = 'numeric';

// Printing the date/time in UTC then local format
console.log('Date in UTC: ', now_utc.toLocaleDateString('us-EN', date_format));
console.log('Date in LOC: ', now_local.toLocaleDateString('us-EN', date_format));

मैं स्थानीय समय के लिए डेट ऑब्जेक्ट डिफ़ॉल्ट बना रहा हूं। मैं इसमें यूटीसी ऑफ-सेट जोड़ रहा हूं। मैं एक दिनांक-स्वरूपण ऑब्जेक्ट बना रहा हूं। मैं वांछित प्रारूप में UTC दिनांक / समय प्रदर्शित कर रहा हूँ:

यहां छवि विवरण दर्ज करें


1

x-dateमॉड्यूल का उपयोग करें जो एक्स-क्लास लाइब्रेरी के उप-मॉड्यूलों में से एक है ;

require('x-date') ; 
  //---
 new Date().format('yyyy-mm-dd HH:MM:ss')
  //'2016-07-17 18:12:37'
 new Date().format('ddd , yyyy-mm-dd HH:MM:ss')
  // 'Sun , 2016-07-17 18:12:51'
 new Date().format('dddd , yyyy-mm-dd HH:MM:ss')
 //'Sunday , 2016-07-17 18:12:58'
 new Date().format('dddd ddSS of mmm , yy')
  // 'Sunday 17thth +0300f Jul , 16'
 new Date().format('dddd ddS  mmm , yy')
 //'Sunday 17th  Jul , 16'

1
new Date().toString("yyyyMMddHHmmss").
      replace(/T/, ' ').  
      replace(/\..+/, '') 

.toString () के साथ, यह प्रारूप में हो जाता है

प्रतिस्थापित करें (/ T /, '')। // T को बदलकर '2017-01-15 ...

प्रतिस्थापित करें (/..+/, '') // के लिए ... 13: 50: 16.1271

उदाहरण, var देखें dateऔर hour:

var date="2017-01-15T13:50:16.1271".toString("yyyyMMddHHmmss").
                    replace(/T/, ' ').      
                    replace(/\..+/, '');
    
                    var auxCopia=date.split(" ");
                    date=auxCopia[0];
                    var hour=auxCopia[1];

console.log(date);
console.log(hour);


1
क्या आप अपने उत्तर के पीछे संदर्भ के रूप में कुछ स्पष्टीकरण प्रदान कर सकते हैं?
T-Heron

StackOverflow में आपका स्वागत है। कृपया अपना उत्तर संपादित करें, या आप नीचे मतदान कर सकते हैं। जैसा कि अभी है, यह बिना किसी संदर्भ के सिर्फ एक सुझाव है। कैसे एक अच्छा जवाब लिखने के लिए कृपया यहाँ देखें ।
jacefarm

@ user7396942 - अब अप-वोट किया गया है, अपने उत्तर में संदर्भ / स्पष्टीकरण जोड़ने के लिए। डिस्क्लेमर: मैं वह नहीं था, जो पहले डाउन-वोट किया था, क्योंकि यह अब बहुत बेहतर लग रहा है।
टी-हेरन

3
क्यों .toString("yyyyMMddHHmmss")?
अर्जन

1

तारीख के लिए सबसे आसान तरीका प्रारूपण का उपयोग कर रहा है। https://momentjs.com/

const moment = require('moment')
const current = moment().utc().format('Y-M-D H:M:S')

धन्यवाद, @ Jazeb_007 यह मेरे लिए काम कर रहा है यहां तक ​​कि मुझे ज़रूरत नहीं है toISOString()औरtoUTCString()
बबलू अहमद

0

मुझे लोकल और लैंग्वेज सपोर्ट की घंटियों और सीटियों के बिना एक साधारण फॉर्मेटिंग लाइब्रेरी की जरूरत थी। इसलिए मैंने संशोधित किया

http://www.mattkruse.com/javascript/date/date.js

और इसका इस्तेमाल किया। Https://github.com/adgang/atom-time/blob/master/lib/dateformat.js देखें

प्रलेखन बहुत स्पष्ट है।


0
appHelper.validateDates = function (start, end) {
    var returnval = false;

    var fd = new Date(start);
    var fdms = fd.getTime();
    var ed = new Date(end);
    var edms = ed.getTime();
    var cd = new Date();
    var cdms = cd.getTime();

    if (fdms >= edms) {
        returnval = false;
        console.log("step 1");
    }
    else if (cdms >= edms) {
        returnval = false;
        console.log("step 2");
    }
    else {
        returnval = true;
        console.log("step 3");
    }
    console.log("vall", returnval)
    return returnval;
}

-1

मुझे लगता है कि यह वास्तव में आपके प्रश्न का उत्तर देता है।

यह जावास्क्रिप्ट में दिनांक / समय के साथ काम करना बहुत कष्टप्रद है। कुछ भूरे बालों के बाद मुझे पता चला कि वास्तव में बहुत सरल था।

var date = new Date();
var year = date.getUTCFullYear();
var month = date.getUTCMonth();
var day = date.getUTCDate();
var hours = date.getUTCHours();
var min = date.getUTCMinutes();
var sec = date.getUTCSeconds();

var ampm = hours >= 12 ? 'pm' : 'am';
hours = ((hours + 11) % 12 + 1);//for 12 hour format

var str = month + "/" + day + "/" + year + " " + hours + ":" + min + ":" + sec + " " + ampm;
var now_utc =  Date.UTC(str);

यहाँ एक बेला है


आपको महीने में 1 जोड़ने की आवश्यकता है जो शून्य-आधारित है।
मिस्त्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.