Bir UTC tarihini NodeJS kullanarak `YYYY-AA-GG ss: dd: ss` dizesi olarak nasıl biçimlendirebilirim?


242

NodeJS kullanarak, a Dateaşağıdaki dize biçimine biçimlendirmek istiyorum:

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

Bunu nasıl yaparım?


4
Herhangi bir kütüphane olmadan yapmak biraz zahmetli. Datejs
Peter Olson

8
veya momentjs
Mustafa

veya Tempus
Dan D.

Tempus harika çalıştı. Reklam sorunları biraz zaman kazanacaktır.
Tampa

1
Ne Datejs ne de Tempus Düğüm kütüphaneleri değildir (Düğüm ile kullanılabilmesine rağmen npm kütüphane yükleyicisini kullanamazsınız). Kimse bunları gerçek cevaplar olarak göstermediği için, ben kendim yaptım.
Julian Knight

Yanıtlar:


532

Node.js kullanıyorsanız, EcmaScript 5'e sahip olduğunuzdan emin olun, böylece Date'in bir toISOStringyöntemi vardır. ISO8601'de küçük bir değişiklik istiyorsunuz:

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

Sadece birkaç şeyi kesin ve hazırsınız:

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

Veya tek bir satırda: new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')

ISO8601 zorunlu olarak UTC'dir (ilk sonuçta sondaki Z ile de belirtilir), bu nedenle varsayılan olarak UTC alırsınız (her zaman iyi bir şeydir).


4
Kütüphanelerin kullanımından kaçınan akıllı ve basit bir çözüm - güzel!
Wingman4l7

11
Hata Object has no method 'toISOString'alırsanız, kaçırdınıznew
allenhwkim

29
Dikkat edilmesi gereken bir şey, düzenli ifadeleri bu şekilde kullanmanın yavaş olması ve burada bunlara bile ihtiyacınız olmamasıdır, bu: new Date().toISOString().replace('T', ' ').substr(0, 19)gayet iyi çalışıyor.
Killah

2
Saat dilimini kaldırarak, artık her saat diliminde farklı bir kayma ile farklı bir anı temsil ettiğini unutmayın.
RobG

1
@RobG Açık bir saat dilimi olmayan herhangi bir tarih saat temsili hakkında bunu söyleyebilirsiniz.
Phil

105

GÜNCELLEME 2017-03-29: Tarih-fns, Moment ve Datejs hakkında bazı notlar eklendi
GÜNCELLEME 2016-09-14: Bazı mükemmel tarih / saat işlevlerine sahip gibi görünen SugarJS eklendi.


Tamam, kimse gerçek bir cevap vermediği için işte benim.

Kütüphane kesinlikle tarih ve saatleri standart bir şekilde ele almak için en iyi seçenektir. Tarih / saat hesaplamalarında birçok uç durum vardır, bu nedenle geliştirmeyi bir kütüphaneye dağıtmak yararlıdır.

Düğüm uyumlu zaman formatlama ana kütüphanelerinin listesi:

  • Moment.js [ Mustafa sayesinde ] "Tarihleri ​​ayrıştırmak, değiştirmek ve biçimlendirmek için hafif (4.3k) bir javascript tarih kütüphanesi" - Uluslararasılaştırma, hesaplamalar ve göreceli tarih biçimlerini içerir - Güncelleme 2017-03-29 : Pek hafif değil özellikle de saat dilimi desteğine ihtiyacınız varsa, ancak yine de en kapsamlı çözüm.
  • date-fns [ Fractalf sayesinde 2017-03-29 eklendi ] Küçük, hızlı, standart JS tarih nesneleriyle çalışır. Saat dilimi desteğine ihtiyacınız yoksa Moment'e harika bir alternatif.
  • SugarJS - JavaScripts yerleşik nesne türlerine çok gerekli özellikler ekleyen genel bir yardımcı kitaplık. Bazı mükemmel görünümlü tarih / saat yetenekleri içerir.
  • strftime - Tam söylediği gibi, hoş ve basit
  • dateutil - MomentJS'den önce kullandığım bu
  • düğüm formatdate
  • TimeTraveller - "Time Traveler, tarihlerle başa çıkmak için bir dizi yardımcı program yöntemi sunar. Toplama ve çıkarma işlemlerinden biçimlendirmeye kadar. Time Traveler, oluşturduğu tarih nesnelerini yalnızca genel ad alanını kirletmeden genişletir."
  • Tempus [Dan D sayesinde] - GÜNCELLEME: Bu, Düğüm ile de kullanılabilir ve npm ile konuşlandırılabilir, dokümanlara bakın

Düğüm olmayan kütüphaneler de vardır:

  • Datejs [Peter Olson sayesinde] - npm veya GitHub'da paketlenmemiş, bu yüzden Node ile kullanımı o kadar kolay değil - 2007'den beri güncellenmediği için gerçekten tavsiye edilmez!

2
Bu da son derece alakalı date-fns.org ( github.com/date-fns/date-fns )
Fractalf


Teşekkürler @alxndr, yararlı bir yeniden başlatma gibi görünüyor.
Julian Knight

RunKit'te Moment + toISOString (): runkit.com/shanekenyon87/5b845b0a64ab3f0012c9c607
Shane

70

Dönüştürmek için bir kütüphane var:

npm install dateformat

Sonra gereksiniminizi yazın:

var dateFormat = require('dateformat');

Sonra değeri bağlayın:

var day=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");

tarih biçimine bakınız


14
Nedir result.request_date?
Dan Dascalescu

45

Genel olarak kütüphanelere karşı hiçbir şeyim yok. Bu durumda, başvuru sürecinin diğer bölümleri yoğun bir şekilde tarihlenmedikçe, genel amaçlı bir kitaplık aşırı dolu gibi görünür.

Bunun gibi küçük faydalı fonksiyonlar yazmak aynı zamanda hem başlangıç ​​hem de başarılı programcılar için yararlı bir alıştırmadır ve aramızdaki acemiler için bir öğrenme deneyimi olabilir.

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
Bu gerçekten öğrenme için yararlı olsa da, bunun küçük, iyi yapılandırılmış bir kütüphane kullanmaktan daha iyi bir sonuç olduğunu kabul etmem gerekir. Bir kütüphane korunur ve ilk bakışta sizin için belirgin olmayabilecek, ancak bir noktada kolayca ısırılabilecek tasarımdaki uç durumları kapsaması daha olasıdır - tarih / saat hesaplamaları, doğal karmaşıklıkları nedeniyle bu sorunlara özellikle yatkındır.
Julian Knight

8
Bu String.replace () yönteminin çok iyi bir kullanımı, +1 yaratıcılık için
JamieJag

5
Hayır. Bu durumda kesinlikle bir kütüphane kullanın. Biçim değişebilir. Değişmese bile, bu koda karmaşıklık katıyor. Kodunuzu koruyan diğer kişilerin bu işlevi anlamaya çalışmak ve doğru olduğundan emin olmak için zaman harcaması gerekir. Alıştırmalar okul içindir; soru gerçek yaşam kullanımı ile ilgiliydi. Tabii ki, bu sizin ilk veya ikinci "gerçek" projeniz olmadığı sürece; böyle bir şey yapmak iyi olabilir, böylece gelecekte neden yapmamanız gerektiğini öğrenebilirsiniz.
osa

3
Kanıtlanmış / savaşı güçlendirilmiş kod olarak kütüphaneleri kullanmanın genel duygusunu takdir ediyorum, ancak dağıtım karmaşıklığı da ekleyebilirler. Bu kod, takvimle ilgili tüm incelikleri temel alınan Date nesnesine delege eder ve sadece uygun yerde örneğin getUTCDate () yöntemini çağırır. Ayrıca, herkes bu kodda bir hata bulursa, bunu burada stackoverflow.com'da bildirebilir ve temel olarak başka bir kütüphanenin çok gözlü / sığ böcekler yönüyle eşleşebilir. +1
steamer25

11

Herhangi bir kütüphane kullanmadan istediğiniz formatta zaman damgası almanın kolay okunabilir ve özelleştirilebilir yolu:

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 biçiminde zamana ihtiyacınız varsa, sadece işlev çağrılarını değiştirin. Örneğin "getMonth", "getUTCMonth" olur)


9

Javascript kütüphanesi sugar.js ( http://sugarjs.com/ ) tarihleri ​​biçimlendirme işlevlerine sahiptir

Misal:

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

3
Gerçekten harika bir kütüphane gibi görünüyor. Biçimlendirmeleri oldukça kaygan ve belgeleri JavaScript'te hayal kırıklığına uğradığım yüzlerce şeye zarif çözümler gösteriyor. Bunu deneyeceğim.
eimajenthat

6

Date nesnesinde sağlanan yöntemi aşağıdaki gibi kullanın:

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));

Gerçekten kirli görünüyor, ancak JavaScript çekirdek yöntemleriyle iyi çalışmalı


2
Ocak 0 olarak geldiğinden getMonth () için 1 eklemeniz gerektiğini kabul ediyorum, ancak getDate () için 1 eklemek istediğinizi düşünmüyorum.
Steve Onorato

5

Dateformat kullanıyorum Nodejs ve angularjs, bu nedenle iyi de

Yüklemek

$ npm install dateformat
$ dateformat --help

gösteri

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'a hoş geldiniz. Lütfen cevabınızı düzenleyin, aksi takdirde oylarınız azalabilir. Şimdi olduğu gibi, sadece bağlamsız bir öneri. İyi Bir Yanıt Nasıl Yazılır için lütfen buraya bakın .
jacefarm

Bu, de-locale ile olur (dolayısıyla toLocaleString):3.2.2015, 15:30:00
14'te

2

Alternatif # 6233 ....

UTC ofsetini yerel saate ekleyin ve ardından nesne toLocaleDateString()yöntemiyle istenen formata dönüştürün 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));

Yerel saate varsayılan olarak bir tarih nesnesi oluşturuyorum. Ben UTC off-set ekliyorum. Bir tarih biçimlendirme nesnesi oluşturuyorum. UTC tarihini / saatini istenen biçimde görüntülüyorum:

resim açıklamasını buraya girin


1

X sınıfı kütüphaneninx-date alt modüllerinden biri olan modülü kullanın ;

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(/\..+/, '') 

ile .toString (), Bu formatta olur

değiştirin (/ T /, ''). // T yerine '' 2017-01-15T ...

13: 50: 16.1271 için değiştirin (/..+/, '') //

örnek, bkz. var dateve 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
Cevabınızın arkasında bağlam olarak bir açıklama yapabilir misiniz?
T-Heron

StackOverflow'a hoş geldiniz. Lütfen cevabınızı düzenleyin, aksi takdirde oylarınız azalabilir. Şimdi olduğu gibi, sadece bağlamsız bir öneri. İyi Bir Yanıt Nasıl Yazılır için lütfen buraya bakın .
jacefarm

@ user7396942 - cevabınıza bağlam / açıklama eklemek için şimdi oylandı. Feragatname: Daha önce oy kullanmayan kişi ben değildim, çünkü şimdi daha iyi görünüyor .
T-Heron

3
Neden .toString("yyyyMMddHHmmss")?
Arjan

1

Tarih biçimlendirmesi için en kolay yol moment lib kullanmaktır. https://momentjs.com/

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

Teşekkürler, @ Jazeb_007 İhtiyacım olmasa bile benim için çalışıyor toISOString()vetoUTCString()
Bablu Ahmed


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;
}

0

Aşağıdaki kodu ve MDN bağlantısını kontrol edin

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

// exact format
console.log(new Date().toISOString().replace('T', ' ').substring(0, 19))

// other formats
console.log(new Date().toUTCString())
console.log(new Date().toLocaleString('en-US'))
console.log(new Date().toString())


-1

Bence bu aslında sorunuzu cevaplıyor.

Javascript tarih / saat ile çalışmak çok can sıkıcı bir durum. Birkaç gri kıldan sonra bunun oldukça basit olduğunu anladım.

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);

İşte bir keman


Sıfır tabanlı aya 1 eklemeniz gerekir.
Mistic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.