Formatting the date time with Javascript
我有一个日期/时间字符串,如
我使用以下代码,但它抛出异常。
1 2 3 | var now ="2012-01-13 04:37:20"; var dd = now.toLocaleDateString() +"" + now.toLocaleTimeString(); alert(dd); |
您可以执行简单的字符串操作并创建js日期对象。请参阅下面的函数,该函数以格式// yyyy-mm-dd hh:mm:ss接受日期
DEMO在这里
1 2 3 4 5 6 7 8 9 10 11 | function toJSDate (dateTime) { var dateTime = dateTime.split("");//dateTime[0] = date, dateTime[1] = time var date = dateTime[0].split("-"); var time = dateTime[1].split(":"); //(year, month, day, hours, minutes, seconds, milliseconds) return new Date(date[0], date[1], date[2], time[0], time[1], time[2], 0); } |
JavaSCript中最好的日期时间处理库就是时刻。
1 | moment().format('MMMM Do YYYY, h:mm:ss a'); |
使用简单的字符串操作(如@SKS所建议)或使用库。后者更灵活,可让您轻松更改输入或输出格式。例如,使用Globalize.js库,您可以编写:
1 2 | var dd = Globalize.parseDate(now,"yyyy-MM-dd HH:mm:ss"); dd = Globalize.format(dd,"dd-MM-yyyy HH:mm"); |
但请注意,诸如"dd-mm-yyyy hh:mm"之类的格式令人困惑 - 它既不是标准ISO格式也不是任何本地化(语言相关)格式。除了明确指定的格式之外,Globalize.js库还允许您使用预定义的语言相关格式。
请注意,JavaScript中的内置日期和时间解析和格式化例程是依赖于实现的。使用它们意味着不可移植的代码。例如,不能保证
如果您不需要像Moment.js这样的库提供的所有功能,那么您可以使用我的strftime端口。它的重量轻(1.35 KB与57.9 KB相比,与Moment.js 2.15.0相比缩小)并提供
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | /* Port of strftime(). Compatibility notes: * * %c - formatted string is slightly different * %D - not implemented (use"%m/%d/%y" or"%d/%m/%y") * %e - space is not added * %E - not implemented * %h - not implemented (use"%b") * %k - space is not added * %n - not implemented (use" ") * %O - not implemented * %r - not implemented (use"%I:%M:%S %p") * %R - not implemented (use"%H:%M") * %t - not implemented (use"\t") * %T - not implemented (use"%H:%M:%S") * %U - not implemented * %W - not implemented * %+ - not implemented * %% - not implemented (use"%") * * strftime() reference: * http://man7.org/linux/man-pages/man3/strftime.3.html * * Day of year (%j) code based on Joe Orost's answer: * http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366 * * Week number (%V) code based on Taco van den Broek's prototype: * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html */ function strftime(sFormat, date) { if (!(date instanceof Date)) date = new Date(); var nDay = date.getDay(), nDate = date.getDate(), nMonth = date.getMonth(), nYear = date.getFullYear(), nHour = date.getHours(), aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], isLeapYear = function() { return (nYear%4===0 && nYear%100!==0) || nYear%400===0; }, getThursday = function() { var target = new Date(date); target.setDate(nDate - ((nDay+6)%7) + 3); return target; }, zeroPad = function(nNum, nPad) { return ('' + (Math.pow(10, nPad) + nNum)).slice(1); }; return sFormat.replace(/%[a-z]/gi, function(sMatch) { return { '%a': aDays[nDay].slice(0,3), '%A': aDays[nDay], '%b': aMonths[nMonth].slice(0,3), '%B': aMonths[nMonth], '%c': date.toUTCString(), '%C': Math.floor(nYear/100), '%d': zeroPad(nDate, 2), '%e': nDate, '%F': date.toISOString().slice(0,10), '%G': getThursday().getFullYear(), '%g': ('' + getThursday().getFullYear()).slice(2), '%H': zeroPad(nHour, 2), '%I': zeroPad((nHour+11)%12 + 1, 2), '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3), '%k': '' + nHour, '%l': (nHour+11)%12 + 1, '%m': zeroPad(nMonth + 1, 2), '%M': zeroPad(date.getMinutes(), 2), '%p': (nHour<12) ? 'AM' : 'PM', '%P': (nHour<12) ? 'am' : 'pm', '%s': Math.round(date.getTime()/1000), '%S': zeroPad(date.getSeconds(), 2), '%u': nDay || 7, '%V': (function() { var target = getThursday(), n1stThu = target.valueOf(); target.setMonth(0, 1); var nJan1 = target.getDay(); if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7); return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2); })(), '%w': '' + nDay, '%x': date.toLocaleDateString(), '%X': date.toLocaleTimeString(), '%y': ('' + nYear).slice(2), '%Y': nYear, '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'), '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1') }[sMatch] || sMatch; }); } |
样品用法:
1 2 3 4 5 6 | // Returns"15-09-2016 16:20" strftime('%d-%m-%Y %H:%M'); // You can optionally pass it a Date object // Returns"01-01-2016 21:30" strftime('%d-%m-%Y %H:%M', new Date('Jan 1, 2016 9:30 PM')); |
最新代码可在此处获取:https://github.com/thdoan/strftime
我认为最好使用
用法非常简单。您无法按照自己的意愿输入模式,但它会为您提供所需的结果。
以下是如何使用它的示例:
1 2 3 4 | public formatDate(date : Date) : string{ var options = { year: 'numeric', month: 'short', day: 'numeric' }; return new Intl.DateTimeFormat('de-DE', options).format(date); } |
如果你真的想输入一个DateTimeFormat字符串,那么编写一个使用Regex解析字符串的函数就很容易了,但我认为不需要它。
欲了解更多信息,请访问:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat
使用Jquery,你可以像这样窃取datepicker的功能:
1 | $.datepicker.formatDate("dd-M-yy", new Date()) |
要在javascript中使用DateTimes,最好使用'Intl.DateTimeFormat',如下所示:
1 2 3 4 | var date = new Date('2012-01-13 14:37:20'); var options = { year: 'numeric', month: '2-digit', day: '2-digit', hour:'2-digit', minute: '2-digit',hour12: false}; console.log(new Intl.DateTimeFormat('en-US', options).format(date).replace(/\//g,'-').replace(',','')); |
结果:"01-13-2012 14:37"
可以使用options参数自定义日期和时间格式。
在线查看
一个小功能,如下:
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 | var formatTime = function(time, format){ time = typeof time == 'number' ? new Date(time) : time; format = format || 'yyyy-mm-dd hh:MM:ss'; var year = time.getFullYear(); var month = time.getMonth() + 1; var date = time.getDate(); var hours = time.getHours(); var minutes = time.getMinutes(); var seconds = time.getSeconds(); var add0 = function(t){return t < 10 ? '0' + t : t} var replaceMent = { 'yyyy': year, 'mm': add0(month), 'm': month, 'dd': add0(date), 'd': date, 'hh': add0(hours), 'h': hours, 'MM': add0(minutes), 'M': minutes, 'ss': add0(seconds), 's': seconds } for( var k in replaceMent ){ format = format.replace(k, replaceMent[k]); } return format; |
}
通过我的日期短代码包轻松完成:
1 2 3 | const dateShortcode = require('date-shortcode') dateShortcode.parse('{DD-MM-YYYY hh:mm}', '2012-01-13 04:37:20') //=> '13-01-2012 04:37' |
日期需要Date对象,所以你应该给var d = new Date()这样的东西
然后进行格式化,请参阅http://code.google.com/p/datejs/链接,这将有所帮助。
您的变量现在是