Вопрос по javascript, date, node.js – Как отформатировать дату UTC в виде строки `ГГГГ-ММ-ДД чч: мм: сс` с помощью NodeJS?

180

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

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

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

Ни Datejs, ни Tempus не являются библиотеками Node (хотя их можно использовать с Node, вы не можете использовать установщик библиотеки npm). Поскольку никто не выдвинул их в качестве реальных ответов, я сделал это сам. Julian Knight
или жеmomentjs Mustafa
Это как бы надоело обходиться без каких-либо библиотек. Я рекомендую использоватьdatejs Peter Olson
Темпус работал отлично. Рекламные проблемы будут моментом. Tampa
или жеTempus Dan D.

Ваш Ответ

14   ответов
5
new Date(2015,1,3,15,30).toLocaleString()

//=> 2015-02-03 15:30:00
Добро пожаловать в StackOverflow. Пожалуйста, отредактируйте свой ответ, иначе вас могут опровергнуть. Как и сейчас, это просто предложение без контекста. Пожалуйста, смотрите здесь дляHow to Write a Good Answer.
0

вой поддержки. Поэтому я модифицировал

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

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

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

8

формате без использования какой-либо библиотеки:

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

0

I think this actually answers your question.

После нескольких седых волос я поняла, что это было довольно просто.

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 к месяцу, который начинается с нуля.
53

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

npm install dateformat

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

var dateFormat = require('dateformat');


Then bind the value:

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

see dateformat

Что такоеresult.request_date?
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;
}
9

http://sugarjs.com/) имеет функции для форматирования дат

Пример:

Date.create().format('{dd}/{MM}/{yyyy} {hh}:{mm}:{ss}.{fff}')
Похоже, действительно потрясающая библиотека. Их форматирование довольно приятное, и их документы показывают элегантные решения для сотен других вещей, которые я разочаровал в JavaScript. Собираюсь попробовать.
4

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

Я согласен, что вам нужно добавить 1 для getMonth (), поскольку январь возвращается как 0, но я не думаю, что вы хотите добавить 1 для getDate ().
96

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

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

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

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

Moment.js [thanks to Mustafa] "A lightweight (4.3k) javascript date library for parsing, manipulating, and formatting dates" - Includes internationalization, calculations and relative date formats - Update 2017-03-29: Not quite so light-weight any more but still the most comprehensive solution, especially if you need timezone support. date-fns [added 2017-03-29, thanks to Fractalf] Small, fast, works with standard JS date objects. Great alternative to Moment if you don't need timezone support. SugarJS - A general helper library adding much needed features to JavaScripts built-in object types. Includes some excellent looking date/time capabilities. strftime - Just what it says, nice and simple dateutil - This is the one I used to use before MomentJS node-formatdate TimeTraveller - "Time Traveller provides a set of utility methods to deal with dates. From adding and subtracting, to formatting. Time Traveller only extends date objects that it creates, without polluting the global namespace." Tempus [thanks to Dan D] - UPDATE: this can also be used with Node and deployed with npm, see the docs

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

Datejs [thanks to Peter Olson] - not packaged in npm or GitHub so not quite so easy to use with Node - not really recommended as not updated since 2007!
Это также очень актуальноdate-fns.org (github.com/date-fns/date-fns)
У людей, стоящих за Моментом, есть эксперимент, названный Luxon с февраля 2018moment.github.io/luxon/index.html
Спасибо @alxndr, похоже на полезную перезагрузку.
Момент + toISOString () на RunKit:runkit.com/shanekenyon87/5b845b0a64ab3f0012c9c607
37

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

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

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"  */
Нет. В этом случае обязательно используйте библиотеку. Формат может измениться. Даже если это не изменится, это усложнит код. Другим людям, обслуживающим ваш код, придется потратить время, пытаясь понять эту функцию и убедиться, что она правильная. Упражнения для школы; вопрос был о реальном использовании. Если, конечно, это не ваш первый или второй "настоящий" проект; тогда может быть хорошо сделать что-то подобное, чтобы вы могли понять, почему вы не должны делать это в будущем.
Это очень хорошее использование метода String.replace (), +1 для творчества
Хотя это действительно может быть полезно для обучения, я бы не согласился с тем, что это лучший результат, чем использование небольшой, хорошо сконструированной библиотеки. Библиотека будет поддерживаться и с большей вероятностью будет охватывать крайние случаи в дизайне, которые могут быть не очевидны для вас на первый взгляд, но могут легко укусить в какой-то момент - вычисления даты / времени особенно подвержены этим проблемам из-за присущей им сложности.
Я ценю общее чувство использования библиотек в качестве проверенного / закаленного в бою кода, но они также могут добавить сложность развертывания. Этот код делегирует все связанные с календарем тонкости базовому объекту Date и просто вызывает, например, метод getUTCDate () в соответствующем месте. Кроме того, если кто-то найдет ошибку в этом коде, он может сообщить об этом здесь на stackoverflow.com, по сути, совпадая с аспектом много-глаз / мелкие ошибки любой другой библиотеки. +1
0

Формат даты в 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
new Date().toString("yyyyMMddHHmmss").
      replace(/T/, ' ').  
      replace(/\..+/, '') 

replace(/T/, ' '). //replace T to ' ' 2017-01-15T...

replace(/..+/, '') //for ...13:50:16.1271

пример, см. вар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);

Можете ли вы дать некоторые объяснения в контексте контекста вашего ответа?
Почему.toString("yyyyMMddHHmmss")?
@ T-Heron мой ответ отредактирован
Добро пожаловать в StackOverflow. Пожалуйста, отредактируйте свой ответ, иначе вас могут опровергнуть. Как и сейчас, это просто предложение без контекста. Пожалуйста, смотрите здесь дляHow to Write a Good Answer.
@ user7396942 - теперь проголосовали за добавление контекста / объяснения в ваш ответ. Отказ от ответственности: я был не тот, кто ранее проголосовал против, как он стоит сейчас, похожеmuch лучше.
409

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

@RobG Вы можете сказать это о любом представлении даты и времени, которое не имеет явного часового пояса.
Умное и простое решение, которое позволяет избежать использования библиотек - приятно!
Если вы получили ошибку,Object has no method 'toISOString', Вы пропустилиnew
Обратите внимание, что при удалении часового пояса он теперь представляет различный момент времени в каждом часовом поясе с другим смещением.
Следует отметить, что использование регулярных выражений медленным способом, и вам здесь даже не нужно, вот так:new Date().toISOString().replace('T', ' ').substr(0, 19) работает просто отлично.
1

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

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'

Похожие вопросы