Format JavaScript date as yyyy-mm-dd
JavascriptDateFormattingDatetime FormatDate FormatJavascript Problem Overview
I have a date with the format Sun May 11,2014
. How can I convert it to 2014-05-11
using JavaScript?
function taskDate(dateMilli) {
var d = (new Date(dateMilli) + '').split(' ');
d[2] = d[2] + ',';
return [d[0], d[1], d[2], d[3]].join(' ');
}
var datemilli = Date.parse('Sun May 11,2014');
console.log(taskDate(datemilli));
The code above gives me the same date format, sun may 11,2014
. How can I fix this?
Javascript Solutions
Solution 1 - Javascript
Just leverage the built-in toISOString
method that brings your date to the ISO 8601 format:
let yourDate = new Date()
yourDate.toISOString().split('T')[0]
Where yourDate is your date object.
Edit: @exbuddha wrote this to handle time zone in the comments:
const offset = yourDate.getTimezoneOffset()
yourDate = new Date(yourDate.getTime() - (offset*60*1000))
return yourDate.toISOString().split('T')[0]
Solution 2 - Javascript
You can do:
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
console.log(formatDate('Sun May 11,2014'));
Usage example:
console.log(formatDate('Sun May 11,2014'));
Output:
2014-05-11
Demo on JSFiddle: http://jsfiddle.net/abdulrauf6182012/2Frm3/
Solution 3 - Javascript
I use this way to get the date in format yyyy-mm-dd :)
var todayDate = new Date().toISOString().slice(0, 10);
console.log(todayDate);
Solution 4 - Javascript
2020 ANSWER
You can use the native .toLocaleDateString() function which supports several useful params like locale (to select a format like MM/DD/YYYY or YYYY/MM/DD), timezone (to convert the date) and formats details options (eg: 1 vs 01 vs January).
Examples
const testCases = [
new Date().toLocaleDateString(), // 8/19/2020
new Date().toLocaleString(undefined, {year: 'numeric', month: '2-digit', day: '2-digit', weekday:"long", hour: '2-digit', hour12: false, minute:'2-digit', second:'2-digit'}),
new Date().toLocaleDateString('en-US', {year: 'numeric', month: '2-digit', day: '2-digit'}), // 08/19/2020 (month and day with two digits)
new Date().toLocaleDateString('en-ZA'), // 2020/08/19 (year/month/day) notice the different locale
new Date().toLocaleDateString('en-CA'), // 2020-08-19 (year-month-day) notice the different locale
new Date().toLocaleString("en-US", {timeZone: "America/New_York"}), // 8/19/2020, 9:29:51 AM. (date and time in a specific timezone)
new Date().toLocaleString("en-US", {hour: '2-digit', hour12: false, timeZone: "America/New_York"}), // 09 (just the hour)
]
for (const testData of testCases) {
console.log(testData)
}
Notice that sometimes to output a date in your specific desire format, you have to find a compatible locale with that format. You can find the locale examples here: https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocalestring_date_all
Please notice that locale just change the format, if you want to transform a specific date to a specific country or city time equivalent then you need to use the timezone param.
Solution 5 - Javascript
The simplest way to convert your date to the yyyy-mm-dd format, is to do this:
var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
.toISOString()
.split("T")[0];
How it works:
new Date("Sun May 11,2014")
converts the string"Sun May 11,2014"
to a date object that represents the timeSun May 11 2014 00:00:00
in a timezone based on current locale (host system settings)new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
converts your date to a date object that corresponds with the timeSun May 11 2014 00:00:00
in UTC (standard time) by subtracting the time zone offset.toISOString()
converts the date object to an ISO 8601 string2014-05-11T00:00:00.000Z
.split("T")
splits the string to array["2014-05-11", "00:00:00.000Z"]
[0]
takes the first element of that array
Demo
var date = new Date("Sun May 11,2014"); var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 )) .toISOString() .split("T")[0];
console.log(dateString);
Solution 6 - Javascript
A combination of some of the answers:
var d = new Date(date);
date = [
d.getFullYear(),
('0' + (d.getMonth() + 1)).slice(-2),
('0' + d.getDate()).slice(-2)
].join('-');
Solution 7 - Javascript
format = function date2str(x, y) {
var z = {
M: x.getMonth() + 1,
d: x.getDate(),
h: x.getHours(),
m: x.getMinutes(),
s: x.getSeconds()
};
y = y.replace(/(M+|d+|h+|m+|s+)/g, function(v) {
return ((v.length > 1 ? "0" : "") + z[v.slice(-1)]).slice(-2)
});
return y.replace(/(y+)/g, function(v) {
return x.getFullYear().toString().slice(-v.length)
});
}
Result:
format(new Date('Sun May 11,2014'), 'yyyy-MM-dd')
"2014-05-11
Solution 8 - Javascript
If you don't have anything against using libraries, you could just use the Moments.js library like so:
var now = new Date();
var dateString = moment(now).format('YYYY-MM-DD');
var dateStringWithTime = moment(now).format('YYYY-MM-DD HH:mm:ss');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
Solution 9 - Javascript
You can use toLocaleDateString('fr-CA')
on Date
object
console.log(new Date('Sun May 11,2014').toLocaleDateString('fr-CA'));
Also I found out that those locales give right result from this locales list https://stackoverflow.com/questions/3191664/list-of-all-locales-and-their-short-codes
'en-CA'
'fr-CA'
'lt-LT'
'sv-FI'
'sv-SE'
var localesList = ["af-ZA",
"am-ET",
"ar-AE",
"ar-BH",
"ar-DZ",
"ar-EG",
"ar-IQ",
"ar-JO",
"ar-KW",
"ar-LB",
"ar-LY",
"ar-MA",
"arn-CL",
"ar-OM",
"ar-QA",
"ar-SA",
"ar-SY",
"ar-TN",
"ar-YE",
"as-IN",
"az-Cyrl-AZ",
"az-Latn-AZ",
"ba-RU",
"be-BY",
"bg-BG",
"bn-BD",
"bn-IN",
"bo-CN",
"br-FR",
"bs-Cyrl-BA",
"bs-Latn-BA",
"ca-ES",
"co-FR",
"cs-CZ",
"cy-GB",
"da-DK",
"de-AT",
"de-CH",
"de-DE",
"de-LI",
"de-LU",
"dsb-DE",
"dv-MV",
"el-GR",
"en-029",
"en-AU",
"en-BZ",
"en-CA",
"en-GB",
"en-IE",
"en-IN",
"en-JM",
"en-MY",
"en-NZ",
"en-PH",
"en-SG",
"en-TT",
"en-US",
"en-ZA",
"en-ZW",
"es-AR",
"es-BO",
"es-CL",
"es-CO",
"es-CR",
"es-DO",
"es-EC",
"es-ES",
"es-GT",
"es-HN",
"es-MX",
"es-NI",
"es-PA",
"es-PE",
"es-PR",
"es-PY",
"es-SV",
"es-US",
"es-UY",
"es-VE",
"et-EE",
"eu-ES",
"fa-IR",
"fi-FI",
"fil-PH",
"fo-FO",
"fr-BE",
"fr-CA",
"fr-CH",
"fr-FR",
"fr-LU",
"fr-MC",
"fy-NL",
"ga-IE",
"gd-GB",
"gl-ES",
"gsw-FR",
"gu-IN",
"ha-Latn-NG",
"he-IL",
"hi-IN",
"hr-BA",
"hr-HR",
"hsb-DE",
"hu-HU",
"hy-AM",
"id-ID",
"ig-NG",
"ii-CN",
"is-IS",
"it-CH",
"it-IT",
"iu-Cans-CA",
"iu-Latn-CA",
"ja-JP",
"ka-GE",
"kk-KZ",
"kl-GL",
"km-KH",
"kn-IN",
"kok-IN",
"ko-KR",
"ky-KG",
"lb-LU",
"lo-LA",
"lt-LT",
"lv-LV",
"mi-NZ",
"mk-MK",
"ml-IN",
"mn-MN",
"mn-Mong-CN",
"moh-CA",
"mr-IN",
"ms-BN",
"ms-MY",
"mt-MT",
"nb-NO",
"ne-NP",
"nl-BE",
"nl-NL",
"nn-NO",
"nso-ZA",
"oc-FR",
"or-IN",
"pa-IN",
"pl-PL",
"prs-AF",
"ps-AF",
"pt-BR",
"pt-PT",
"qut-GT",
"quz-BO",
"quz-EC",
"quz-PE",
"rm-CH",
"ro-RO",
"ru-RU",
"rw-RW",
"sah-RU",
"sa-IN",
"se-FI",
"se-NO",
"se-SE",
"si-LK",
"sk-SK",
"sl-SI",
"sma-NO",
"sma-SE",
"smj-NO",
"smj-SE",
"smn-FI",
"sms-FI",
"sq-AL",
"sr-Cyrl-BA",
"sr-Cyrl-CS",
"sr-Cyrl-ME",
"sr-Cyrl-RS",
"sr-Latn-BA",
"sr-Latn-CS",
"sr-Latn-ME",
"sr-Latn-RS",
"sv-FI",
"sv-SE",
"sw-KE",
"syr-SY",
"ta-IN",
"te-IN",
"tg-Cyrl-TJ",
"th-TH",
"tk-TM",
"tn-ZA",
"tr-TR",
"tt-RU",
"tzm-Latn-DZ",
"ug-CN",
"uk-UA",
"ur-PK",
"uz-Cyrl-UZ",
"uz-Latn-UZ",
"vi-VN",
"wo-SN",
"xh-ZA",
"yo-NG",
"zh-CN",
"zh-HK",
"zh-MO",
"zh-SG",
"zh-TW",
"zu-ZA"
];
localesList.forEach(lcl => {
if ("2014-05-11" === new Date('Sun May 11,2014').toLocaleDateString(lcl)) {
console.log(lcl, new Date('Sun May 11,2014').toLocaleDateString(lcl));
}
});
Solution 10 - Javascript
Simply use this:
var date = new Date('1970-01-01'); // Or your date here
console.log((date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear());
Simple and sweet ;)
Solution 11 - Javascript
Shortest
.toJSON().slice(0,10);
var d = new Date('Sun May 11,2014' +' UTC'); // Parse as UTC
let str = d.toJSON().slice(0,10); // Show as UTC
console.log(str);
Solution 12 - Javascript
toISOString()
assumes your date is local time and converts it to UTC. You will get an incorrect date string.
The following method should return what you need.
Date.prototype.yyyymmdd = function() {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
var dd = this.getDate().toString();
return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};
Source: https://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/
Solution 13 - Javascript
Retrieve year, month, and day, and then put them together. Straight, simple, and accurate.
function formatDate(date) {
var year = date.getFullYear().toString();
var month = (date.getMonth() + 101).toString().substring(1);
var day = (date.getDate() + 100).toString().substring(1);
return year + "-" + month + "-" + day;
}
//Usage example:
alert(formatDate(new Date()));
Solution 14 - Javascript
You can try this: https://www.npmjs.com/package/timesolver
npm i timesolver
Use it in your code:
const timeSolver = require('timeSolver');
const date = new Date();
const dateString = timeSolver.getString(date, "YYYY-MM-DD");
You can get the date string by using this method:
getString
Solution 15 - Javascript
To consider the timezone also, this one-liner should be good without any library:
new Date().toLocaleString("en-IN", {timeZone: "Asia/Kolkata"}).split(',')[0]
Solution 16 - Javascript
new Date().toLocaleDateString('pt-br').split( '/' ).reverse( ).join( '-' );
or
new Date().toISOString().split('T')[0]
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString()
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString().split('T')[0]
Try this!
Solution 17 - Javascript
const formatDate = d => [
d.getFullYear(),
(d.getMonth() + 1).toString().padStart(2, '0'),
d.getDate().toString().padStart(2, '0')
].join('-');
You can make use of padstart.
padStart(n, '0') ensures that a minimum of n characters are in a string and prepends it with '0's until that length is reached.
join('-') concatenates an array, adding '-' symbol between every elements.
getMonth() starts at 0 hence the +1.
Solution 18 - Javascript
The 2021 solution using Intl
.
The new Intl
Object is now supported on all browsers.
You can choose the format by choosing a "locale" that uses the required format.
The Swedish locale uses the format "yyyy-mm-dd":
// Create a date
const date = new Date(2021, 10, 28);
// Create a formatter using the "sv-SE" locale
const dateFormatter = Intl.DateTimeFormat('sv-SE');
// Use the formatter to format the date
console.log(dateFormatter.format(date)); // "2021-11-28"
Downsides of using Intl:
-
You cannot "unformat" or "parse" strings using this method
-
You have to search for the required format (for instance on Wikipedia) and cannot use a format-string like "yyyy-mm-dd"
Solution 19 - Javascript
I suggest using something like formatDate-js instead of trying to replicate it every time. Just use a library that supports all the major strftime actions.
new Date().format("%Y-%m-%d")
Solution 20 - Javascript
When ES2018 rolls around (works in chrome) you can simply regex it
(new Date())
.toISOString()
.replace(
/^(?<year>\d+)-(?<month>\d+)-(?<day>\d+)T.*$/,
'$<year>-$<month>-$<day>'
)
2020-07-14
Or if you'd like something pretty versatile with no libraries whatsoever
(new Date())
.toISOString()
.match(
/^(?<yyyy>\d\d(?<yy>\d\d))-(?<mm>0?(?<m>\d+))-(?<dd>0?(?<d>\d+))T(?<HH>0?(?<H>\d+)):(?<MM>0?(?<M>\d+)):(?<SSS>(?<SS>0?(?<S>\d+))\.\d+)(?<timezone>[A-Z][\dA-Z.-:]*)$/
)
.groups
Which results in extracting the following
{
H: "8"
HH: "08"
M: "45"
MM: "45"
S: "42"
SS: "42"
SSS: "42.855"
d: "14"
dd: "14"
m: "7"
mm: "07"
timezone: "Z"
yy: "20"
yyyy: "2020"
}
Which you can use like so with replace(..., '$<d>/$<m>/\'$<yy> @ $<H>:$<MM>')
as at the top instead of .match(...).groups
to get
14/7/'20 @ 8:45
Solution 21 - Javascript
Unfortunately, JavaScript's Date
object has many pitfalls. Any solution based on Date
's builtin toISOString
has to mess with the timezone, as discussed in some other answers to this question. The clean solution to represent an ISO-8601 date (without time) is given by Temporal.PlainDate
from the Temporal
proposal. As of February 2021, you have to choose the workaround that works best for you.
Date
with vanilla string concatenation
use Assuming that your internal representation is based on Date
, you can perform manual string concatenation. The following code avoids some of Date
's pitfalls (timezone, zero-based month, missing 2-digit formatting), but there might be other issues.
function vanillaToDateOnlyIso8601() {
// month May has zero-based index 4
const date = new Date(2014, 4, 11);
const yyyy = date.getFullYear();
const mm = String(date.getMonth() + 1).padStart(2, "0"); // month is zero-based
const dd = String(date.getDate()).padStart(2, "0");
if (yyyy < 1583) {
// TODO: decide how to support dates before 1583
throw new Error(`dates before year 1583 are not supported`);
}
const formatted = `${yyyy}-${mm}-${dd}`;
console.log("vanilla", formatted);
}
Date
with helper library (e.g. formatISO
from date-fns
)
use This is a popular approach, but you are still forced to handle a calendar date as a Date
, which represents
> a single moment in time in a platform-independent format
The following code should get the job done, though:
import { formatISO } from "date-fns";
function dateFnsToDateOnlyIso8601() {
// month May has zero-based index 4
const date = new Date(2014, 4, 11);
const formatted = formatISO(date, { representation: "date" });
console.log("date-fns", formatted);
}
find a library that properly represents dates and times
I wish there was a clean and battle-tested library that brings its own well-designed date–time representations. A promising candidate for the task in this question was LocalDate
from @js-joda/core
, but the library is less active than, say, date-fns
. When playing around with some example code, I also had some issues after adding the optional @js-joda/timezone
.
However, the core functionality works and looks very clean to me:
import { LocalDate, Month } from "@js-joda/core";
function jodaDateOnlyIso8601() {
const someDay = LocalDate.of(2014, Month.MAY, 11);
const formatted = someDay.toString();
console.log("joda", formatted);
}
Temporal
-proposal polyfill
experiment with the This is not recommended for production, but you can import the future if you wish:
import { Temporal } from "proposal-temporal";
function temporalDateOnlyIso8601() {
// yep, month is one-based here (as of Feb 2021)
const plainDate = new Temporal.PlainDate(2014, 5, 11);
const formatted = plainDate.toString();
console.log("proposal-temporal", formatted);
}
Solution 22 - Javascript
Here is one way to do it:
var date = Date.parse('Sun May 11,2014');
function format(date) {
date = new Date(date);
var day = ('0' + date.getDate()).slice(-2);
var month = ('0' + (date.getMonth() + 1)).slice(-2);
var year = date.getFullYear();
return year + '-' + month + '-' + day;
}
console.log(format(date));
Solution 23 - Javascript
Date.js is great for this.
require("datejs")
(new Date()).toString("yyyy-MM-dd")
Solution 24 - Javascript
None of these answers quite satisfied me. I wanted a cross-platform solution that gave me the day in the local timezone without using any external libraries.
This is what I came up with:
function localDay(time) {
var minutesOffset = time.getTimezoneOffset()
var millisecondsOffset = minutesOffset*60*1000
var local = new Date(time - millisecondsOffset)
return local.toISOString().substr(0, 10)
}
That should return the day of the date, in YYYY-MM-DD format, in the timezone the date references.
So for example, localDay(new Date("2017-08-24T03:29:22.099Z"))
will return "2017-08-23"
even though it's already the 24th at UTC.
You'll need to polyfill Date.prototype.toISOString for it to work in Internet Explorer 8, but it should be supported everywhere else.
Solution 25 - Javascript
A few of the previous answer were OK, but they weren't very flexible. I wanted something that could really handle more edge cases, so I took @orangleliu 's answer and expanded on it. https://jsfiddle.net/8904cmLd/1/
function DateToString(inDate, formatString) {
// Written by m1m1k 2018-04-05
// Validate that we're working with a date
if(!isValidDate(inDate))
{
inDate = new Date(inDate);
}
// See the jsFiddle for extra code to be able to use DateToString('Sun May 11,2014', 'USA');
//formatString = CountryCodeToDateFormat(formatString);
var dateObject = {
M: inDate.getMonth() + 1,
d: inDate.getDate(),
D: inDate.getDate(),
h: inDate.getHours(),
m: inDate.getMinutes(),
s: inDate.getSeconds(),
y: inDate.getFullYear(),
Y: inDate.getFullYear()
};
// Build Regex Dynamically based on the list above.
// It should end up with something like this: "/([Yy]+|M+|[Dd]+|h+|m+|s+)/g"
var dateMatchRegex = joinObj(dateObject, "+|") + "+";
var regEx = new RegExp(dateMatchRegex,"g");
formatString = formatString.replace(regEx, function(formatToken) {
var datePartValue = dateObject[formatToken.slice(-1)];
var tokenLength = formatToken.length;
// A conflict exists between specifying 'd' for no zero pad -> expand
// to '10' and specifying yy for just two year digits '01' instead
// of '2001'. One expands, the other contracts.
//
// So Constrict Years but Expand All Else
if (formatToken.indexOf('y') < 0 && formatToken.indexOf('Y') < 0)
{
// Expand single digit format token 'd' to
// multi digit value '10' when needed
var tokenLength = Math.max(formatToken.length, datePartValue.toString().length);
}
var zeroPad = (datePartValue.toString().length < formatToken.length ? "0".repeat(tokenLength) : "");
return (zeroPad + datePartValue).slice(-tokenLength);
});
return formatString;
}
Example usage:
DateToString('Sun May 11,2014', 'MM/DD/yy');
DateToString('Sun May 11,2014', 'yyyy.MM.dd');
DateToString(new Date('Sun Dec 11,2014'),'yy-M-d');
Solution 26 - Javascript
If you use momentjs
, now they include a constant for that format YYYY-MM-DD
:
date.format(moment.HTML5_FMT.DATE)
Solution 27 - Javascript
In the most of cases (no time zone handling) this is enough:
date.toISOString().substring(0,10)
Solution 28 - Javascript
Reformatting a date string is fairly straightforward, e.g.
var s = 'Sun May 11,2014';
function reformatDate(s) {
function z(n){return ('0' + n).slice(-2)}
var months = [,'jan','feb','mar','apr','may','jun',
'jul','aug','sep','oct','nov','dec'];
var b = s.split(/\W+/);
return b[3] + '-' +
z(months.indexOf(b[1].substr(0,3).toLowerCase())) + '-' +
z(b[2]);
}
console.log(reformatDate(s));
Solution 29 - Javascript
function myYmd(D){
var pad = function(num) {
var s = '0' + num;
return s.substr(s.length - 2);
}
var Result = D.getFullYear() + '-' + pad((D.getMonth() + 1)) + '-' + pad(D.getDate());
return Result;
}
var datemilli = new Date('Sun May 11,2014');
document.write(myYmd(datemilli));
Solution 30 - Javascript
Yet another combination of the answers. Nicely readable, but a little lengthy.
function getCurrentDayTimestamp() {
const d = new Date();
return new Date(
Date.UTC(
d.getFullYear(),
d.getMonth(),
d.getDate(),
d.getHours(),
d.getMinutes(),
d.getSeconds()
)
// `toIsoString` returns something like "2017-08-22T08:32:32.847Z"
// and we want the first part ("2017-08-22")
).toISOString().slice(0, 10);
}
Solution 31 - Javascript
This worked for me to get the current date in the desired format (YYYYMMDD HH:MM:SS):
var d = new Date();
var date1 = d.getFullYear() + '' +
((d.getMonth()+1) < 10 ? "0" + (d.getMonth() + 1) : (d.getMonth() + 1)) +
'' +
(d.getDate() < 10 ? "0" + d.getDate() : d.getDate());
var time1 = (d.getHours() < 10 ? "0" + d.getHours() : d.getHours()) +
':' +
(d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes()) +
':' +
(d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds());
print(date1+' '+time1);
Solution 32 - Javascript
var d = new Date("Sun May 1,2014");
var year = d.getFullYear();
var month = d.getMonth() + 1;
var day = d.getDate();
month = checkZero(month);
day = checkZero(day);
var date = "";
date += year;
date += "-";
date += month;
date += "-";
date += day;
document.querySelector("#display").innerHTML = date;
function checkZero(i)
{
if (i < 10)
{
i = "0" + i
}; // add zero in front of numbers < 10
return i;
}
<div id="display"></div>
Solution 33 - Javascript
new Date(new Date(YOUR_DATE.toISOString()).getTime() -
(YOUR_DATE.getTimezoneOffset() * 60 * 1000)).toISOString().substr(0, 10)
Solution 34 - Javascript
No library is needed
Just pure JavaScript.
The example below gets the last two months from today:
var d = new Date()
d.setMonth(d.getMonth() - 2);
var dateString = new Date(d);
console.log('Before Format', dateString, 'After format', dateString.toISOString().slice(0,10))
Solution 35 - Javascript
PHP compatible date format
Here is a small function which can take the same parameters as the PHP function date()
and return a date/time string in JavaScript.
Note that not all date() format options from PHP are supported. You can extend the parts
object to create the missing format-token
/** * Date formatter with PHP "date()"-compatible format syntax. */ const formatDate = (format, date) => { if (!format) { format = 'Y-m-d' } if (!date) { date = new Date() }
const parts = {
Y: date.getFullYear().toString(),
y: ('00' + (date.getYear() - 100)).toString().slice(-2),
m: ('0' + (date.getMonth() + 1)).toString().slice(-2),
n: (date.getMonth() + 1).toString(),
d: ('0' + date.getDate()).toString().slice(-2),
j: date.getDate().toString(),
H: ('0' + date.getHours()).toString().slice(-2),
G: date.getHours().toString(),
i: ('0' + date.getMinutes()).toString().slice(-2),
s: ('0' + date.getSeconds()).toString().slice(-2)
}
const modifiers = Object.keys(parts).join('')
const reDate = new RegExp('(?<!\\\\)[' + modifiers + ']', 'g')
const reEscape = new RegExp('\\\\([' + modifiers + '])', 'g')
return format
.replace(reDate, $0 => parts[$0])
.replace(reEscape, ($0, $1) => $1)
}
// ----- EXAMPLES ----- console.log( formatDate() ); // "2019-05-21" console.log( formatDate('H:i:s') ); // "16:21:32" console.log( formatDate('Y-m-d, o\n H:i:s') ); // "2019-05-21, on 16:21:32" console.log( formatDate('Y-m-d', new Date(2000000000000)) ); // "2033-05-18"
Gist
Here is a gist with an updated version of the formatDate()
function and additional examples: https://gist.github.com/stracker-phil/c7b68ea0b1d5bbb97af0a6a3dc66e0d9
Solution 36 - Javascript
If the date needs to be the same across all time zones, for example represents some value from the database, then be sure to use UTC versions of the day, month, fullyear functions on the JavaScript date object as this will display in UTC time and avoid off-by-one errors in certain time zones.
Even better, use the Moment.js date library for this sort of formatting.
Solution 37 - Javascript
Format and finding maximum and minimum date from hashmap data:
var obj = {"a":'2001-15-01', "b": '2001-12-02' , "c": '2001-1-03'};
function findMaxMinDate(obj){
let formatEncode = (id)=> { let s = id.split('-'); return ${s[0]+'-'+s[2]+'-'+s[1]}
}
let formatDecode = (id)=> { let s = id.split('/'); return ${s[2]+'-'+s[0]+'-'+s[1]}
}
let arr = Object.keys( obj ).map(( key )=> { return new Date(formatEncode(obj[key])); });
let min = new Date(Math.min.apply(null, arr)).toLocaleDateString();
let max = new Date(Math.max.apply(null, arr)).toLocaleDateString();
return {maxd: ${formatDecode(max)}
, mind:${formatDecode(min)}
}
}
console.log(findMaxMinDate(obj));
Solution 38 - Javascript
This code change the order of DD MM YYYY
function convertDate(format, date) {
let formatArray = format.split('/');
if (formatArray.length != 3) {
console.error('Use a valid Date format');
return;
}
function getType(type) { return type == 'DD' ? d.getDate() : type == 'MM' ? d.getMonth() + 1 : type == 'YYYY' && d.getFullYear(); }
function pad(s) { return (s < 10) ? '0' + s : s; }
var d = new Date(date);
return [pad(getType(formatArray[0])), pad(getType(formatArray[1])), getType(formatArray[2])].join('/');
}
Solution 39 - Javascript
const today = new Date(); // or whatever
const yearFirstFormater = (date): string => {
const modifiedDate = new Date(date).toISOString().slice(0, 10);
return `${modifiedDate.split('-')[0]}/${modifiedDate.split('-')[1]}/${modifiedDate.split('-')[2]}`;
}
const monthFirstFormater = (date): string => {
const modifiedDate = new Date(date).toISOString().slice(0, 10);
return `${modifiedDate.split('-')[1]}/${modifiedDate.split('-')[2]}/${modifiedDate.split('-')[0]}`;
}
const dayFirstFormater = (date): string => {
const modifiedDate = new Date(date).toISOString().slice(0, 10);
return `${modifiedDate.split('-')[2]}/${modifiedDate.split('-')[1]}/${modifiedDate.split('-')[0]}`;
}
console.log(yearFirstFormater(today));
console.log(monthFirstFormater(today));
console.log(dayFirstFormater(today));
Solution 40 - Javascript
formatDate(date) {
const d = new Date(date)
const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(d);
const mo = new Intl.DateTimeFormat('en', { month: 'short' }).format(d);
const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(d);
return `${da}-${mo}-${ye}`;
}
console.log("Formatated Date : ", formatDate("09/25/2020") )
// Output :: Formatated Date : 25-Sep-2020
Solution 41 - Javascript
Follow up on https://stackoverflow.com/a/29774197/1189762 This is what I had to change regarding the offset for when people are east or west from the Greenwich Mean Time:
export const toNativeHtml5InputDate = (date) => {
if (!date) return date;
let offset = new Date(date).getTimezoneOffset();
offset =
offset < 0
? offset * -1 // east from Greenwich Mean Time
: offset; // west from Greenwich Mean Time
return new Date(new Date(date).getTime() + offset * 60 * 1000)
.toISOString()
.split('T')[0];
};
Solution 42 - Javascript
All given answers are great and helped me big. In my situation, I wanted to get the current date in yyyy mm dd format along with date-1. Here is what worked for me.
var endDate = new Date().toISOString().slice(0, 10); // To get the Current Date in YYYY MM DD Format
var newstartDate = new Date();
newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
alert(startDate);
Solution 43 - Javascript
I modified Samit Satpute's response as follows:
var newstartDate = new Date();
// newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().replace(/[-T:\.Z]/g, ""); //.slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
console.log(startDate);
Solution 44 - Javascript
It is easily accomplished by my date-shortcode package:
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYY-MM-DD}', 'Sun May 11,2014')
//=> '2014-05-11'
Solution 45 - Javascript
We run constantly into problems like this. Every solution looks so individual. But looking at php, we have a way dealing with different formats. And there is a port of php's strtotime function at https://locutus.io/php/datetime/strtotime/. A small open source npm package from me as an alternative way:
<script type="module">
import { datebob } from "@dipser/datebob.js";
console.log( datebob('Sun May 11, 2014').format('Y-m-d') );
</script>
See datebob.js
Solution 46 - Javascript
This worked for me, and you can paste this directly into your HTML if needed for testing:
<script type="text/javascript">
if (datefield.type!="date"){ // If the browser doesn't support input type="date",
// initialize date picker widget:
jQuery(function($){ // On document.ready
$('#Date').datepicker({
dateFormat: 'yy-mm-dd', // THIS IS THE IMPORTANT PART!!!
showOtherMonths: true,
selectOtherMonths: true,
changeMonth: true,
minDate: '2016-10-19',
maxDate: '2016-11-03'
});
})
}
</script>