Using NodeJS, I want to format a Date
into the following string format:
var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");
How do I do that?
Using NodeJS, I want to format a Date
into the following string format:
var ts_hms = new Date(UTC);
ts_hms.format("%Y-%m-%d %H:%M:%S");
How do I do that?
If you're using Node.js, you're sure to have EcmaScript 5, and so Date has a toISOString
method. You're asking for a slight modification of ISO8601:
new Date().toISOString()
> '2012-11-04T14:51:06.157Z'
So just cut a few things out, and you're set:
new Date().toISOString().
replace(/T/, ' '). // replace T with a space
replace(/\..+/, '') // delete the dot and everything after
> '2012-11-04 14:55:45'
Or, in one line: new Date().toISOString().replace(/T/, ' ').replace(/\..+/, '')
ISO8601 is necessarily UTC (also indicated by the trailing Z on the first result), so you get UTC by default (always a good thing).
Object has no method 'toISOString'
, you missed new
–
Anguiano new Date().toISOString().replace('T', ' ').substr(0, 19)
works just fine. –
Tango (new Date()).toISOString().slice(0,16).replace('T',' ')
which removes the regex. This gives the answer without seconds. –
Lepsy new Date().toLocaleString('default', { dateStyle: 'medium', timeStyle: 'short' })
–
Brewer yyyy-mm-dd
you can do new (Date()).toISOString().split('T').pop();
–
Brainwash UPDATE 2021-10-06: Added Day.js and remove spurious edit by @ashleedawg
UPDATE 2021-04-07: Luxon added by @Tampa.
UPDATE 2021-02-28: It should now be noted that Moment.js is no longer being actively developed. It won't disappear in a hurry because it is embedded in so many other things. The website has some recommendations for alternatives and an explanation of why.
UPDATE 2017-03-29: Added date-fns, some notes on Moment and Datejs
UPDATE 2016-09-14: Added SugarJS which seems to have some excellent date/time functions.
OK, since no one has actually provided an actual answer, here is mine.
A library is certainly the best bet for handling dates and times in a standard way. There are lots of edge cases in date/time calculations so it is useful to be able to hand-off the development to a library.
Here is a list of the main Node compatible time formatting libraries:
There are also non-Node libraries:
const dayjs = require('dayjs')
dayjs(1318781876406).format("HH:mm DD-MM-YYYY")
–
Intraatomic There's a library for conversion:
npm install dateformat
Then write your requirement:
var dateFormat = require('dateformat');
Then bind the value:
var day=dateFormat(new Date(), "yyyy-mm-dd h:MM:ss");
see dateformat
internal/modules/cjs/loader.js:1167 throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath); ^ Error [ERR_REQUIRE_ESM]: Must use import to load ES Module:
–
Glorygloryofthesnow I have nothing against libraries in general. In this case a general purpose library seems overkill, unless other parts of the application process dates heavily.
Writing small utility functions such as this is also a useful exercise for both beginning and accomplished programmers alike and can be a learning experience for the novices amongst us.
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" */
Check the code below and the link to Date Object, Intl.DateTimeFormat
// 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())
// log format
const parts = new Date().toString().split(' ')
console.log([parts[1], parts[2], parts[4]].join(' '))
// intl
console.log(new Intl.DateTimeFormat('en-US', {dateStyle: 'long', timeStyle: 'long'}).format(new Date()))
Easily readable and customisable way to get a timestamp in your desired format, without use of any library:
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())
}
(If you require time in UTC format, then just change the function calls. For example "getMonth" becomes "getUTCMonth")
function pad(n) {return n<10 ? "0"+n : ""+n}
–
Goodly The javascript library sugar.js (http://sugarjs.com/) has functions to format dates
Example:
Date.create().format('{dd}/{MM}/{yyyy} {hh}:{mm}:{ss}.{fff}')
I am using dateformat at Nodejs and angularjs, so good
install
$ npm install dateformat
$ dateformat --help
demo
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
...
Use the method provided in the Date object as follows:
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));
It looks really dirty, but it should work fine with JavaScript core methods
For date formatting the most easy way is using moment lib. https://momentjs.com/
const moment = require('moment')
const current = moment().utc().format('Y-M-D H:M:S')
toISOString()
and toUTCString()
–
Presignify Alternative #6233....
Add the UTC offset to the local time then convert it to the desired format with the toLocaleDateString()
method of the Date
object:
// 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));
I'm creating a date object defaulting to the local time. I'm adding the UTC off-set to it. I'm creating a date-formatting object. I'm displaying the UTC date/time in the desired format:
new Date(2015,1,3,15,30).toLocaleString()
//=> 2015-02-03 15:30:00
3.2.2015, 15:30:00
–
Hyalite In reflect your time zone, you can use this
var datetime = new Date();
var dateString = new Date(
datetime.getTime() - datetime.getTimezoneOffset() * 60000
);
var curr_time = dateString.toISOString().replace("T", " ").substr(0, 19);
console.log(curr_time);
Here's a handy vanilla one-liner (adapted from this):
var timestamp =
new Date((dt = new Date()).getTime() - dt.getTimezoneOffset() * 60000)
.toISOString()
.replace(/(.*)T(.*)\..*/,'$1 $2')
console.log(timestamp)
Output: 2022-02-11 11:57:39
Use x-date
module which is one of sub-modules of 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'
I needed a simple formatting library without the bells and whistles of locale and language support. So I modified
http://www.mattkruse.com/javascript/date/date.js
and used it. See https://github.com/adgang/atom-time/blob/master/lib/dateformat.js
The documentation is pretty clear.
new Date().toString("yyyyMMddHHmmss").
replace(/T/, ' ').
replace(/\..+/, '')
with .toString(), This becomes in format
replace(/T/, ' '). //replace T to ' ' 2017-01-15T...
replace(/..+/, '') //for ...13:50:16.1271
example, see var date
and 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")
? –
Scrabble Here's a lightweight library simple-date-format I've written, works both on node.js and in the browser
Install
npm install @riversun/simple-date-format
or
<script src="https://cdn.jsdelivr.net/npm/@riversun/simple-date-format/lib/simple-date-format.js"></script>
Load Library
import SimpleDateFormat from "@riversun/simple-date-format";
const SimpleDateFormat = require('@riversun/simple-date-format');
Usage1
const date = new Date('2018/07/17 12:08:56');
const sdf = new SimpleDateFormat();
console.log(sdf.formatWith("yyyy-MM-dd'T'HH:mm:ssXXX", date));//to be "2018-07-17T12:08:56+09:00"
Usage2
const date = new Date('2018/07/17 12:08:56');
const sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
console.log(sdf.format(date));//to be "2018-07-17T12:08:56+09:00"
Patterns for formatting
https://github.com/riversun/simple-date-format#pattern-of-the-date
import dateFormat from 'dateformat'; var ano = new Date()
<footer>
<span>{props.data.footer_desc} <a href={props.data.footer_link}>{props.data.footer_text_link}</a> {" "}
({day = dateFormat(props.data.updatedAt, "yyyy")})
</span>
</footer>
Modern web browsers (and Node.js) expose internationalization and time zone support via the Intl object which offers a Intl.DateTimeFormat.prototype.formatToParts()
method.
You can do below with no added library:
function format(dateObject){
let dtf = new Intl.DateTimeFormat("en-US", {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric'
});
var parts = dtf.formatToParts(dateObject);
var fmtArr = ["year","month","day","hour","minute","second"];
var str = "";
for (var i = 0; i < fmtArr.length; i++) {
if(i===1 || i===2){
str += "-";
}
if(i===3){
str += " ";
}
if(i>=4){
str += ":";
}
for (var ii = 0; ii < parts.length; ii++) {
let type = parts[ii]["type"]
let value = parts[ii]["value"]
if(fmtArr[i]===type){
str = str += value;
}
}
}
return str;
}
console.log(format(Date.now()));
new Date().toLocaleString("sv") // "2023-04-16 14:31:08"
I.e. Sweden happen to use to the format you are looking for.
An example of code from moment js
moment(currentTime, "YYYY-MM-DDTH:mm:ssZ");
The result of using this format: 2024-01-20T12:44:00Z
When currentTime is in UTC
for client-side, I added it like this and it worked fine, and instead of using moment, you may use dayJS.
I will utilize the padStart() which is a method of String
data type. This method appends a specified string until the resulting string reaches a given length, which is set to 2 in our case.
Both of these methods do not rely on external libraries, keeping your codebase lightweight.
1st example:
function formatDate(date) {
const year = date.getUTCFullYear();
const month = String(date.getUTCMonth() + 1).padStart(2, '0'); // Months are 0-based
const day = String(date.getUTCDate()).padStart(2, '0');
const hours = String(date.getUTCHours()).padStart(2, '0');
const minutes = String(date.getUTCMinutes()).padStart(2, '0');
const seconds = String(date.getUTCSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
const ts_hms = new Date(); // You can pass the UTC time here
console.log(formatDate(ts_hms));
2nd example:
// another way to do it using `toISOString()`
function formatDateV2(date) {
return date.toISOString().slice(0, 19).replace('T', ' ');
}
const ts_hms_v2 = new Date(); // You can pass the UTC time here
console.log(formatDateV2(ts_hms_v2));
.slice(0, 19)
: The slice()
method is used to extract a portion of the string. In this case, it starts at the beginning (index 0) and takes the first 19 characters. This operation effectively removes the milliseconds and time zone offset from the ISO string, leaving only the date and time components.
.replace('T', ' ')
: The replace()
method is used to replace one substring ('T') with another (' '). In ISO 8601 format, the 'T' character separates the date and time components. This step replaces 'T' with a space (' '), making the final output more human-readable.
I think this actually answers your question.
It is so annoying working with date/time in javascript.
After a few gray hairs I figured out that is was actually pretty simple.
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);
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;
}
it's possible to solve this problem easily with 'Date'.
function getDateAndTime(time: Date) {
const date = time.toLocaleDateString('pt-BR', {
timeZone: 'America/Sao_Paulo',
});
const hour = time.toLocaleTimeString('pt-BR', {
timeZone: 'America/Sao_Paulo',
});
return `${date} ${hour}`;
}
it's to show: // 10/31/22 11:13:25
© 2022 - 2024 — McMap. All rights reserved.
new Date().toUTCString()
? ` – Une