将JavaScript日期格式化为yyyy-mm-dd

我有一个格式为Sun May 11,2014的日期。如何使用JavaScript将其转换为2014-05-11

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

上面的代码给了我相同的日期格式,sun may 11,2014。我该如何解决这个问题?

2271786 次浏览

你可以这样做:

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

使用示例:

console.log(formatDate('Sun May 11,2014'));

输出:

2014-05-11

JSFiddle上的演示:http://jsfiddle.net/abdulrauf6182012/2Frm3/

这里有一个方法来做到这一点:

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

结果:

format(new Date('Sun May 11,2014'), 'yyyy-MM-dd')"2014-05-11

如果所有时区的日期都需要相同,例如代表数据库中的某个值,那么请务必在JavaScript日期对象上使用UTC版本的日、月、全年函数,因为这将以UTC时间显示,并避免某些时区出现错误码。

更好的是,使用Moment.js日期库进行这种格式设置。

我建议使用获取日期格式之类的东西,而不是每次都尝试复制它。只需使用支持所有主要strftime操作的库。

new Date().format("%Y-%m-%d")

只需利用内置的toISOString方法,将您的日期转换为ISO 8601格式:

let yourDate = new Date()yourDate.toISOString().split('T')[0]

其中,Your Date是您的日期对象。

编辑@吴兴龙写这个来处理评论数中的时区:

const offset = yourDate.getTimezoneOffset()yourDate = new Date(yourDate.getTime() - (offset*60*1000))return yourDate.toISOString().split('T')[0]

一些答案的组合:

var d = new Date(date);date = [d.getFullYear(),('0' + (d.getMonth() + 1)).slice(-2),('0' + d.getDate()).slice(-2)].join('-');

Date.js是伟大的。

require("datejs")(new Date()).toString("yyyy-MM-dd")

我使用这种方式获取格式为yyyy-mm-dd的日期:)

var todayDate = new Date().toISOString().slice(0, 10);console.log(todayDate);

你可以试试这个:https://www.npmjs.com/package/timesolver

npm i timesolver

在你的代码中使用它:

const timeSolver = require('timeSolver');const date = new Date();const dateString = timeSolver.getString(date, "YYYY-MM-DD");

您可以使用此方法获取日期字符串:

getString

这对我有用,如果需要测试,您可以将其直接粘贴到您的超文本标记语言中:

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

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

简单地使用这个:

var date = new Date('1970-01-01'); // Or your date hereconsole.log((date.getMonth() + 1) + '/' + date.getDate() + '/' +  date.getFullYear());

简单而甜蜜;)

重新格式化日期字符串相当简单,例如。

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

所有给出的答案都很棒,对我帮助很大。在我的情况下,我想以yyyy mm dd格式获取当前日期以及date-1。这是对我有用的。

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 Formatalert(startDate);

toISOString()假设您的日期是本地时间并将其转换为UTC。您将获得不正确的日期字符串。

以下方法应该返回您需要的内容。

Date.prototype.yyyymmdd = function() {
var yyyy = this.getFullYear().toString();var mm = (this.getMonth()+1).toString(); // getMonth() is zero-basedvar dd  = this.getDate().toString();
return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);};

来源:https://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/

答案的另一个组合。可读性很好,但有点冗长。

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

我想要一个跨平台的解决方案,在不使用任何外部库的情况下,让我在本地时区度过一天。

这就是我想出的:

function localDay(time) {var minutesOffset = time.getTimezoneOffset()var millisecondsOffset = minutesOffset*60*1000var local = new Date(time - millisecondsOffset)return local.toISOString().substr(0, 10)}

这应该在日期引用的时区中以YYYY-MM-DD格式返回日期的日期。

例如,localDay(new Date("2017-08-24T03:29:22.099Z"))将返回"2017-08-23",即使它已经是UTC的第24个。

您需要聚填充Date.prototype.toISOString才能在Internet Explorer 8中工作,但其他任何地方都应该支持它。

我修改了Samit Satpute的回应如下:

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 Formatconsole.log(startDate);

检索年,月,日,然后把它们放在一起。直接,简单,准确。

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

它很容易通过我的日期简码包完成:

const dateShortcode = require('date-shortcode')dateShortcode.parse('{YYYY-MM-DD}', 'Sun May 11,2014')//=> '2014-05-11'

前面的回答有一些还可以,但是它们不是很灵活。我想要能够真正处理更多边缘情况的东西,所以我接受了@orangleliu的回答并对其进行了扩展。https://jsfiddle.net/8904cmLd/1/

function DateToString(inDate, formatString) {// Written by m1m1k 2018-04-05
// Validate that we're working with a dateif(!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 Elseif (formatToken.indexOf('y') < 0 && formatToken.indexOf('Y') < 0){// Expand single digit format token 'd' to// multi digit value '10' when neededvar 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;}

示例用法:

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

将日期转换为yyyy-mm-dd格式的最简单方法是这样做:

var date = new Date("Sun May 11,2014");var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 )).toISOString().split("T")[0];

它是如何工作的:

  • new Date("Sun May 11,2014")将字符串"Sun May 11,2014"转换为日期对象,该对象表示基于当前区域设置(主机系统设置)的时区中的时间Sun May 11 2014 00:00:00
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))通过减去时区偏移量将您的日期转换为与UTC(标准时间)中的时间Sun May 11 2014 00:00:00对应的日期对象
  • .toISOString()将日期对象转换为ISO 8601字符串2014-05-11T00:00:00.000Z
  • .split("T")将字符串拆分为数组["2014-05-11", "00:00:00.000Z"]
  • [0]获取该数组的第一个元素

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

备注:

如果您的输入格式与OP的格式不同,代码的第一部分(new Date(...))可能需要稍微调整一下。作为迈克皮在注释中指出,如果日期字符串已经是预期的输出格式,并且本地时区在UTC以西,那么new Date('2022-05-18')会导致2022-05-17。并且用户的语言环境(例如MM/DD/YYYY vsDD-MM-YYYY)也可能影响new Date(...)解析日期的方式。因此,如果您想将此代码用于不同的输入格式,请进行一些适当的测试。

如果您不反对使用库,您可以像这样使用Moments.js库:

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>

还要考虑时区,这个单行应该很好,没有任何库:

new Date().toLocaleString("en-IN", {timeZone: "Asia/Kolkata"}).split(',')[0]

这使我能够以所需的格式获取当前日期(YYYMMDD 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);

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>

new Date(new Date(YOUR_DATE.toISOString()).getTime() -(YOUR_DATE.getTimezoneOffset() * 60 * 1000)).toISOString().substr(0, 10)

格式化并从hashmap数据中查找最大和最小日期:

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

不需要图书馆

纯粹的JavaScript。

下面的示例获取从今天开始的最后两个月:

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

PHP兼容日期格式

这是一个小函数,它可以采用与PHP函数date()相同的参数,并在JavaScript中返回日期/时间字符串。

请注意,并非PHP中的所有date()格式选项都受支持。您可以扩展parts对象以创建缺少的格式化令牌

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

要点

以下是formatDate()函数的更新版本和其他示例的要点:https://gist.github.com/stracker-phil/c7b68ea0b1d5bbb97af0a6a3dc66e0d9

您可以在Date对象上使用toLocaleDateString('fr-CA')

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

此代码更改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('/');}
new Date('Tue Nov 01 2022 22:14:53 GMT-0300').toLocaleDateString('en-CA');
new Date().toLocaleDateString('pt-br').split( '/' ).reverse( ).join( '-' );

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]

试试这个!

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

如果你使用momentjs,现在它们包括该格式的常量YYYY-MM-DD

date.format(moment.HTML5_FMT.DATE)

我们经常遇到这样的问题。每个解决方案看起来都很独特。但是看看php,我们有一种处理不同格式的方法。https://locutus.io/php/datetime/strtotime/处有一个php的strtotime函数的端口。一个来自我的小型开源npm包作为替代方式:

<script type="module">import { datebob } from "@dipser/datebob.js";console.log( datebob('Sun May 11, 2014').format('Y-m-d') );</script>

datebob.js

当ES2018滚动(在chrome中工作)时,您可以简单地正则表达式它

(new Date()).toISOString().replace(/^(?<year>\d+)-(?<month>\d+)-(?<day>\d+)T.*$/,'$<year>-$<month>-$<day>')

2020-07-14

或者如果你想要一些非常通用的没有任何图书馆

(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

这导致提取以下内容

{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"}

您可以像这样使用replace(..., '$<d>/$<m>/\'$<yy> @ $<H>:$<MM>')作为顶部而不是.match(...).groups来获取

14/7/'20 @ 8:45

2020答案

您可以使用本机.到区域设置日期字符串()函数,它支持几个有用的参数,例如区域设置(选择MM/DD/YYYY或YYYY/MM/DD等格式),时区(转换日期)和格式详细信息选项(例如:1 vs 01 vs一月)。

示例

const testCases = [new Date().toLocaleDateString(), // 8/19/2020new 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 localenew Date().toLocaleDateString('en-CA'), // 2020-08-19 (year-month-day) notice the different localenew 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)}

请注意,有时要以特定的期望格式输出日期,您必须找到与该格式兼容的语言环境。您可以在此处找到语言环境示例:https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocalestring_date_all

请注意,区域设置只是更改格式,如果您想将特定日期转换为特定国家或城市时间等效,则需要使用时区参数。

最短

.toJSON().slice(0,10);

var d = new Date('Sun May 11,2014' +' UTC');   // Parse as UTClet str = d.toJSON().slice(0,10);              // Show as UTC
console.log(str);

const formatDate = d => [d.getFullYear(),(d.getMonth() + 1).toString().padStart(2, '0'),d.getDate().toString().padStart(2, '0')].join('-');

您可以使用Padstart。

padStart(n,'0')确保字符串中至少有n个字符,并在其前面加上'0',直到达到该长度。

连接('-')连接一个数组,在每个元素之间添加'-'符号。

getMonth()从0开始,因此是+1。

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

不幸的是,JavaScript的#0对象许多陷阱。任何基于#0是内置的#2的解决方案都必须扰乱时区,正如此问题的其他答案中所述。#3来自#4提案给出了表示ISO-8601日期(没有时间)的干净解决方案。截至2021年2月,你必须选择最适合你的解决方案。

使用Date与香草字符串连接

假设你的内部表示基于Date,你可以执行手动字符串连接。以下代码避免了Date的一些陷阱(时区、从零开始的月份、缺少2位格式),但可能还存在其他问题。

function vanillaToDateOnlyIso8601() {// month May has zero-based index 4const date = new Date(2014, 4, 11);
const yyyy = date.getFullYear();const mm = String(date.getMonth() + 1).padStart(2, "0"); // month is zero-basedconst dd = String(date.getDate()).padStart(2, "0");
if (yyyy < 1583) {// TODO: decide how to support dates before 1583throw new Error(`dates before year 1583 are not supported`);}
const formatted = `${yyyy}-${mm}-${dd}`;console.log("vanilla", formatted);}

Date与帮助程序库一起使用(例如#1从#2

这是一种流行的方法,但您仍然被迫将日历日期作为#0,表示处理

独立于平台的格式中的单个时刻

但是,以下代码应该可以完成工作:

import { formatISO } from "date-fns";
function dateFnsToDateOnlyIso8601() {// month May has zero-based index 4const date = new Date(2014, 4, 11);const formatted = formatISO(date, { representation: "date" });console.log("date-fns", formatted);}

找到一个正确表示日期和时间的库

我希望有一个干净且经过实战测试的库,可以带来自己精心设计的日期时间表示形式。这个问题中任务的一个有希望的候选者是#0从#1,但是该库不如date-fns活跃。在使用一些示例代码时,在添加可选的@js-joda/timezone后,我也遇到了一些问题。

但是,核心功能有效,在我看来非常干净:

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

实验#0-提案的聚填料

这不建议用于生产,但如果您愿意,可以导入未来:

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

跟进https://stackoverflow.com/a/29774197/1189762这是我必须改变的偏移量,当人们从格林威治时间向东或向西时:

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

在大多数情况下(没有时区处理),这就足够了:

date.toISOString().substring(0,10)

示例

var date = new Date();console.log(date.toISOString()); // 2022-07-04T07:14:08.925Zconsole.log(date.toISOString().substring(0,10)); // 2022-07-04

使用Intl的2021解决方案。

现在所有浏览器都支持新的Intl对象。
您可以通过选择使用所需格式的“区域设置”来选择格式。

瑞典语语言环境使用格式“yyyy-mm-dd”:

// Create a dateconst date = new Date(2021, 10, 28);
// Create a formatter using the "sv-SE" localeconst dateFormatter = Intl.DateTimeFormat('sv-SE');
// Use the formatter to format the dateconsole.log(dateFormatter.format(date)); // "2021-11-28"

使用Intl的缺点:

  • 您不能使用此方法“取消格式”或“解析”字符串
  • 您必须搜索所需的格式(例如在维基百科上),并且不能使用像“yyyy-mm-dd”这样的格式字符串

我有一个单线这个

dateInstance.toLocaleDateString().replaceAll("/", "-").split("-").reverse().join("-");

简单地检索年,月,日,然后把它们放在一起。

    function dateFormat(date) {const day = date.getDate();const month = date.getMonth() + 1;const year = date.getFullYear();
return `${year}-${month}-${day}`;}
console.log(dateFormat(new Date()));

使用joda-js并完成它:

import { DateTimeFormatter, LocalDateTime } from 'js-joda'
const now = LocalDateTime.now()now.format(DateTimeFormatter.ofPattern('yyyyMMdd-HH:mm:ss'))// Outputs: 20221104-09:25:09 according to your timezone (mine is 'America/New_York'

您可以使用此功能以获得更好的格式和易用性:

function convert(date) {const d = Date.parse(date)const   date_obj = new Date(d)return `${date_obj.getFullYear()}-${date_obj.toLocaleString("default", { month: "2-digit" })}-${date_obj.toLocaleString("default", { day: "2-digit"})}`}

此函数将把月份格式化为2位输出以及天数

var today Date=new Date('06-Apr-1992'). toISOString().片(0,10);console.log(今天);