Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Если вы используете 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 по умолчанию (всегда хорошо).

Ответ 2

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


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

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

Вот список основных 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 [спасибо Peter Olson] - не упакован в npm или GitHub, поэтому не так прост в использовании с Node - не очень рекомендуется, так как не обновляется с 2007 года!

Ответ 3

Там библиотека для конвертации:

npm install dateformat

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

var dateFormat = require('dateformat');

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

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

смотри формат даты

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

Пример:

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

Ответ 7

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

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

Ответ 8

Используйте метод, предоставленный в объекте 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

Ответ 9

Используйте модуль 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'

Ответ 10

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

с .toString(), Это делается в формате

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

replace (/..+/, '')//для... 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);

Ответ 12

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

Так раздражает работа с датой/временем в 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);

Вот скрипка

Ответ 13

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

Ответ 14

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

Ответ 15

Альтернатива № 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