it-roy-ru.com

Как отформатировать дату UTC в виде строки `ГГГГ-ММ-ДД чч: мм: сс` с помощью NodeJS?

Используя NodeJS, я хочу отформатировать Date в следующий формат строки:

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

Как я могу это сделать?

194
Tampa

Если вы используете Node.js, вы обязательно используете EcmaScript 5, и поэтому у Date есть метод 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 по умолчанию (всегда хорошо).

432
chbrown

ОБНОВЛЕНИЕ 2017-03-29: добавлены date-fns, некоторые заметки о Moment и Datejs
ОБНОВЛЕНИЕ 2016-09-14: Добавлен SugarJS, который, похоже, обладает отличными функциями даты и времени.


Хорошо, так как никто не дал фактического ответа, вот мой.

Библиотека, безусловно, лучшая ставка для обработки даты и времени стандартным способом. В вычислениях даты/времени есть много случаев Edge, поэтому полезно иметь возможность передавать разработку в библиотеку.

Вот список основных Node совместимых библиотек форматирования времени:

  • Moment.js [ благодаря Mustafa ] "Легкая (4.3k) библиотека JavaScript-дат для анализа, манипулирования и форматирования даты "- включает в себя интернационализацию, расчеты и форматы относительных дат - Обновление 2017-03-29 : не так уж и легко, но все же наиболее полно решение, особенно если вам нужна поддержка часового пояса.
  • date-fns [ добавлено 2017-03-29, благодаря Fractalf ] Небольшой, быстрый, работает со стандартными объектами даты JS , Отличная альтернатива Moment, если вам не нужна поддержка часовых поясов.
  • SugarJS - Общая вспомогательная библиотека, добавляющая столь необходимые функции во встроенные типы объектов JavaScripts. Включает в себя некоторые отличные возможности даты/времени.
  • strftime - Только то, что он говорит, красиво и просто
  • dateutil - Это тот, который я использовал до MomentJS
  • узел-FormatDate
  • TimeTraveller - "Time Traveler предоставляет набор служебных методов для работы с датами. От сложения и вычитания до форматирования. Time Traveler только расширяет создаваемые им объекты даты, не загрязняя глобальное пространство имен."
  • Tempus [благодаря Dan D] - ОБНОВЛЕНИЕ: это также можно использовать с Node и развернуть с помощью npm, см. Документацию

Есть также не-Node библиотеки:

  • Datejs [благодаря Питеру Олсону] - не упакован в npm или GitHub, поэтому его не так просто использовать с Node - не очень рекомендуется, так как не обновляется с 2007 года!
99
Julian Knight

Есть библиотека для конвертации:

npm install dateformat

Затем напишите ваше требование:

var dateFormat = require('dateformat');

Затем свяжите значение:

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

см dateformat

55
Onder OZCAN

Я ничего не имею против библиотек вообще. В этом случае библиотека общего назначения кажется излишней, если только другие части процесса приложения не имеют большой даты.

Написание небольших вспомогательных функций, таких как это, также является полезным упражнением как для начинающих, так и для опытных программистов, и может быть опытом обучения для новичков среди нас.

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"  */
38
HBP

Легко читаемый и настраиваемый способ получения метки времени в нужном формате без использования какой-либо библиотеки:

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" становится "getUTCMonth")

10
Mtl Dev

Библиотека javascript sugar.js ( http://sugarjs.com/ ) имеет функции для форматирования дат

Пример:

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

Используйте метод, предоставленный в объекте Date, следующим образом:

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

Это выглядит очень грязно, но должно хорошо работать с основными методами JavaScript

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

//=> 2015-02-03 15:30:00
5
gest
new Date().toString("yyyyMMddHHmmss").
      replace(/T/, ' ').  
      replace(/\..+/, '') 

с .toString (), это становится в формате

заменить (/ T /, ''). // заменить T на '' 2017-01-15T ...

заменить (/..+/, '') // на ... 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
x-rw

Используйте модуль x-date, который является одним из подмодулей библиотеки x-class ;

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
Abdennour TOUMI

Я использую dateformat в 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
...
1
TinhNQ

Мне нужна была простая библиотека форматирования без наворотов и языковой поддержки. Поэтому я модифицировал

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

и использовал это. Смотрите https://github.com/adgang/atom-time/blob/master/lib/dateformat.js

Документация довольно понятна.

0
adgang

Я думаю, что это действительно отвечает на ваш вопрос.

Так раздражает работа с датой/временем в javascript. После нескольких седых волос я поняла, что это было довольно просто.

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

Вот скрипка

0
J-Roel
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
Benjamin

Альтернатива № 6233 ....

Добавьте смещение UTC к местному времени, а затем преобразуйте его в нужный формат с помощью метода 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 к нему. Я создаю объект форматирования даты. Я показываю дату/время UTC в желаемом формате:

enter image description here

0
Adam