Format JavaScript date as yyyy-mm-dd
我的日期格式为
1 2 3 4 5 6 7 8 9 | 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'); taskdate(datemilli); |
上面的代码为我提供了相同的日期格式
你可以做:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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('-'); } |
用法示例:
1 | alert(formatDate('Sun May 11,2014')); |
输出:
1 | 2014-05-11 |
JSFiddle上的演示:http://jsfiddle.net/abdulrauf6182012/2Frm3/
只需利用内置的
1 | yourDate.toISOString().split('T')[0] |
其中yourDate是您的日期对象。
我使用这种方式以yyyy-mm-dd格式获取日期:)
1 | var todayDate = new Date().toISOString().slice(0,10); |
将日期转换为yyyy-mm-dd格式的最简单方法是:
1 2 3 4 | 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] 接受该数组的第一个元素
演示
1 2 3 4 5 6 | var date = new Date("Sun May 11,2014"); var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 )) .toISOString() .split("T")[0]; console.log(dateString); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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" :"") + eval('z.' + v.slice(-1))).slice(-2) }); return y.replace(/(y+)/g, function(v) { return x.getFullYear().toString().slice(-v.length) }); } |
结果:
1 2 | format(new Date('Sun May 11,2014'), 'yyyy-MM-dd') "2014-05-11 |
一些答案的组合:
1 2 3 4 5 6 | var d = new Date(date); date = [ d.getFullYear(), ('0' + (d.getMonth() + 1)).slice(-2), ('0' + d.getDate()).slice(-2) ].join('-'); |
以下方法应返回您需要的内容。
1 2 3 4 5 6 7 8 | 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]); }; |
来源:https://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/
如果您不反对使用任何库,则可以使用Moments.js库,如下所示:
1 2 3 4 | var now = new Date(); var dateString = moment(now).format('YYYY-MM-DD'); var dateStringWithTime = moment(now).format('YYYY-MM-DD HH:mm:ss'); |
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"> |
只需使用以下命令:
1 2 | var date = new Date('1970-01-01'); // Or your date here console.log((date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear()); |
简单而甜美;)
我建议使用诸如formatDate-js之类的方法,而不是每次尝试复制它。只需使用支持所有主要strftime动作的库即可。
1 | new Date().format("%Y-%m-%d") |
您可以尝试以下方法:https://www.npmjs.com/package/timesolver
1 | npm i timesolver |
在您的代码中使用它:
1 2 3 | const timeSolver = require('timeSolver'); const date = new Date(); const dateString = timeSolver.getString(date,"YYYY-MM-DD"); |
您可以使用以下方法获取日期字符串:
1 | getString |
检索年,月和日,然后将它们放在一起。直观,简单,准确。
1 2 3 4 5 6 7 8 | 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; } alert(formatDate(new Date())); |
这些答案都没有一个令我满意。我想要一个跨平台的解决方案,该解决方案可以让我在本地时区工作,而无需使用任何外部库。
这是我想出的:
1 2 3 4 5 6 | function localDay(time) { var minutesOffset = time.getTimezoneOffset() var millisecondsOffset = minutesOffset*60*1000 var local = new Date(time - millisecondsOffset) return local.toISOString().substr(0, 10) } |
这应该以日期参考的时区以YYYY-MM-DD格式返回日期的日期。
因此,例如,
您需要多填充Date.prototype.toISOString才能使其在InternetExplorer8中工作,但其他地方都应支持它。
同样要考虑时区,这种单行代码在没有任何库的情况下应该很好:
1 | new Date().toLocaleString("en-IN", {timeZone:"Asia/Kolkata"}).split(',')[0] |
Date.js对此非常有用。
1 2 | require("datejs") (new Date()).toString("yyyy-MM-dd") |
1 2 3 4 5 6 7 8 9 10 11 | 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)); |
这对我来说可以用所需的格式(YYYYMMDD HH:MM:SS)获取当前日期:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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); |
无需图书馆
只是纯JavaScript。
下面的示例从今天开始获取最近的两个月:
1 2 3 4 | 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)) |
1 2 | new Date(new Date(YOUR_DATE.toISOString()).getTime() - (YOUR_DATE.getTimezoneOffset() * 60 * 1000)).toISOString().substr(0, 10) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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; } |
1 |
重新格式化日期字符串非常简单,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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)); |
PHP兼容日期格式
这是一个小函数,可以采用与PHP函数
请注意,并非支持PHP中的所有date()格式选项。您可以扩展
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /** * 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\ H:i:s') ); //"2019-05-21, on 16:21:32" console.log( formatDate('Y-m-d', new Date(2000000000000)) ); //"2033-05-18" |
要旨
这是具有
我修改了Samit Satpute的回复,如下所示:
1 2 3 4 | 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); |
答案的另一个组合。可读性很好,但有点冗长。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); } |
格式化并从哈希图数据中找到最大和最小日期:
1 2 3 4 5 6 7 8 9 10 11 12 | 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日期对象上使用UTC版本的日,月,全年功能,因为它将以UTC时间和避免在某些时区出现一对一的错误。
更好的是,使用Moment.js日期库进行这种格式化。
这是一种实现方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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)); |
先前的几个答案还可以,但是它们不太灵活。我想要一种可以真正处理更多边缘情况的东西,因此我接受了@orangleliu的回答并进行了扩展。 https://jsfiddle.net/8904cmLd/1/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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; } |
用法示例:
1 2 3 | 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'); |
我的date-shortcode包很容易完成它:
1 2 3 | const dateShortcode = require('date-shortcode') dateShortcode.parse('{YYYY-MM-DD}', 'Sun May 11,2014') //=> '2014-05-11' |
所有给出的答案都很好,对我有很大帮助。在我的情况下,我想以yyyy mm dd格式获取当前日期以及date-1。这对我有用。
1 2 3 4 5 6 | 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); |
这对我有用,如果需要测试,可以将其直接粘贴到HTML中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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' }); }) } |
就像下面这样使用它。绝对适用于YYYY MM DD,例如2017-03-12。
1 | var todayDate = new Date().slice(0, 10); |