我试图使用JS将日期对象转换为YYYYMMDD格式的字符串。有没有比连接Date.getYear(), Date.getMonth()和Date.getDay()更简单的方法?
当前回答
当然,您可以为日期字符串表示形式的每种变化构建特定的函数。如果您考虑国际日期格式,那么您会得到几十个名称荒谬且难以区分的特定函数。
没有匹配所有格式的合理函数,但有一个合理的函数组合:
const pipe2 = f => g => x => g(f(x)); const pipe3 = f => g => h => x => h(g(f(x))); const invoke = (method, ...args) => o => o[method] (...args); const padl = (c, n) => s => c.repeat(n) .concat(s) .slice(-n); const inc = n => n + 1; // generic format date function const formatDate = stor => (...args) => date => args.map(f => f(date)) .join(stor); // MAIN const toYYYYMMDD = formatDate("") ( invoke("getFullYear"), pipe3(invoke("getMonth")) (inc) (padl("0", 2)), pipe2(invoke("getDate")) (padl("0", 2))); console.log(toYYYYMMDD(new Date()));
是的,这是一大堆代码。但是,您可以通过简单地更改传递给高阶函数formatDate的函数参数来逐字地表示每个字符串日期表示。一切都是显式的和声明性的,也就是说,你几乎可以读到发生了什么。
其他回答
这个家伙这里=> http://blog.stevenlevithan.com/archives/date-time-format写了一个格式()函数Javascript的日期对象,所以它可以使用熟悉的文字格式。
如果你需要在应用程序的Javascript中使用完整的日期格式,请使用它。否则,如果你想做的是一次性的,那么连接getYear(), getMonth(), getDay()可能是最简单的。
[day,,month,,year]= Intl.DateTimeFormat(undefined, { year: 'numeric', month: '2-digit', day: '2-digit' }).formatToParts(new Date()),year.value+month.value+day.value
or
new Date().toJSON().slice(0,10).replace(/\/|-/g,'')
除了o-o的答案之外,我还建议将逻辑操作与返回值分离,并将它们作为三元放入变量中。
另外,使用concat()来确保变量的安全连接
Date.prototype.yyyymmdd = function() { var yyyy = this.getFullYear(); var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based var dd = this.getDate() < 10 ? "0" + this.getDate() : this.getDate(); return "".concat(yyyy).concat(mm).concat(dd); }; Date.prototype.yyyymmddhhmm = function() { var yyyymmdd = this.yyyymmdd(); var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours(); var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes(); return "".concat(yyyymmdd).concat(hh).concat(min); }; Date.prototype.yyyymmddhhmmss = function() { var yyyymmddhhmm = this.yyyymmddhhmm(); var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds(); return "".concat(yyyymmddhhmm).concat(ss); }; var d = new Date(); document.getElementById("a").innerHTML = d.yyyymmdd(); document.getElementById("b").innerHTML = d.yyyymmddhhmm(); document.getElementById("c").innerHTML = d.yyyymmddhhmmss(); <div> yyyymmdd: <span id="a"></span> </div> <div> yyyymmddhhmm: <span id="b"></span> </div> <div> yyyymmddhhmmss: <span id="c"></span> </div>
我希望这个函数会有用
function formatDate(dDate,sMode){
var today = dDate;
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
if(dd<10) {
dd = '0'+dd
}
if(mm<10) {
mm = '0'+mm
}
if (sMode+""==""){
sMode = "dd/mm/yyyy";
}
if (sMode == "yyyy-mm-dd"){
return yyyy + "-" + mm + "-" + dd + "";
}
if (sMode == "dd/mm/yyyy"){
return dd + "/" + mm + "/" + yyyy;
}
}
似乎mootools提供了Date().format(): https://mootools.net/more/docs/1.6.0/Types/Date
但我不确定是否值得只针对这个特定的任务。