从JS日期对象获取YYYYMMDD格式的字符串?
我正在尝试使用 JS 将 date 对象
转换为 YYYYMMDD
格式的字符串。有没有比连接 Date.getYear()
、Date.getMonth()
和 Date.getDay()
更简单的方法?
I'm trying to use JS to turn a date object
into a string in YYYYMMDD
format. Is there an easier way than concatenating Date.getYear()
, Date.getMonth()
, and Date.getDay()
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(30)
修改了我经常使用的代码:
Altered piece of code I often use:
我不喜欢添加到原型中。另一种选择是:
I didn't like adding to the prototype. An alternative would be:
您可以使用 toISOString 函数:
它将为您提供“yyyy-mm-dd”格式。
You can use the
toISOString
function :It will give you a "yyyy-mm-dd" format.
Moment.js 可能是你的朋友
Moment.js could be your friend
如果你不需要纯 JS 解决方案,你可以使用 jQuery UI 来完成这样的工作:
我通常不喜欢导入太多的库。但 jQuery UI 非常有用,您可能会在项目的其他地方使用它。
访问 http://api.jqueryui.com/datepicker/ 了解更多示例
If you don't need a pure JS solution, you can use jQuery UI to do the job like this :
I usually don't like to import too much libraries. But jQuery UI is so useful, you will probably use it somewhere else in your project.
Visit http://api.jqueryui.com/datepicker/ for more examples
这是一行代码,您可以使用它创建今天日期的
YYYY-MM-DD
字符串。This is a single line of code that you can use to create a
YYYY-MM-DD
string of today's date.我不喜欢修改本机对象,并且我认为乘法比填充可接受的解决方案的字符串更清晰。
小提琴:http://jsfiddle.net/gbdarren/Ew7Y4/
I don't like modifying native objects, and I think multiplication is clearer than the string padding the accepted solution.
Fiddle: http://jsfiddle.net/gbdarren/Ew7Y4/
当地时间:
UTC 时间:
当我写这篇文章时,日期将打印为 2020-06-15。
toISOString() 方法返回符合 ISO 标准的日期,即
YYYY-MM-DDTHH:mm:ss.sssZ
该代码采用 YYYY-MM-DD 格式所需的前 10 个字符。
如果您想要不带“-”的格式,请使用:
在 .join`` 中,您可以添加空格、点或任何您想要的内容。
Local time:
UTC time:
date will print 2020-06-15 today as i write this.
toISOString() method returns the date with the ISO standard which is
YYYY-MM-DDTHH:mm:ss.sssZ
The code takes the first 10 characters that we need for a YYYY-MM-DD format.
If you want format without '-' use:
In .join`` you can add space, dots or whatever you'd like.
除了 oo 的答案之外,我还建议将逻辑操作与返回值分开,并将它们作为三元组放在变量中。
另外,使用 concat() 来确保变量的安全串联
In addition to o-o's answer I'd like to recommend separating logic operations from the return and put them as ternaries in the variables instead.
Also, use
concat()
to ensure safe concatenation of variables纯 JS (ES5) 解决方案,没有任何由 UTC 中的 Date.toISOString() 打印引起的可能的日期跳转问题:
这是对 @weberste 对 @Pierre Guilbert 答案的评论的回应。
Plain JS (ES5) solution without any possible date jump issues caused by Date.toISOString() printing in UTC:
This in response to @weberste's comment on @Pierre Guilbert's answer.
另一种方法是使用
toLocaleDateString
具有 big-endian 的语言环境日期格式标准,例如瑞典、立陶宛、匈牙利、韩国……:删除分隔符(
-
)只需替换非数字即可:这不会出现使用 UTC 日期格式时可能出现的潜在错误:与本地时区的日期相比,UTC 日期可能会少一天。
Another way is to use
toLocaleDateString
with a locale that has a big-endian date format standard, such as Sweden, Lithuania, Hungary, South Korea, ...:To remove the delimiters (
-
) is just a matter of replacing the non-digits:This does not have the potential error you can get with UTC date formats: the UTC date may be one day off compared to the date in the local time zone.
dateformat 是一个非常常用的包。
如何使用:
从 NPM 下载并安装
dateformat
。在您的模块中需要它:const dateFormat = require('dateformat');
,然后格式化您的内容:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd' );
dateformat is a very used package.
How to use:
Download and install
dateformat
from NPM. Require it in your module:const dateFormat = require('dateformat');
and then just format your stuff:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
接受的答案有一点变化:
A little variation for the accepted answer:
最短
Shortest
根据 @oo 的答案,这将根据格式字符串返回日期字符串。您可以轻松地为年份和年份添加 2 位数字的年份正则表达式。毫秒之类的,如果你需要的话。
然而,我不知道它的效率如何,尤其是性能方面,因为它使用了大量的正则表达式。它可能会使用一些我不掌握纯js的工作。
注意:我保留了预定义的类定义,但您可能想根据最佳实践将其放入函数或自定义类中。
Working from @o-o's answer this will give you back the string of the date according to a format string. You can easily add a 2 digit year regex for the year & milliseconds and the such if you need them.
I don't know how efficient that is however, especially perf wise because it uses a lot of regex. It could probably use some work I do not master pure js.
NB: I've kept the predefined class definition but you might wanna put that in a function or a custom class as per best practices.
这家伙在这里 => http://blog.stevenlevithan.com/archives/date-time-format为 Javascript 的
Date
对象编写了一个format()
函数,因此它可以与熟悉的文字格式一起使用。如果您需要在应用程序的 Javascript 中使用全功能的日期格式,请使用它。否则,如果您想做的是一次性的,那么连接 getYear()、getMonth()、getDay() 可能是最简单的。
This guy here => http://blog.stevenlevithan.com/archives/date-time-format wrote a
format()
function for the Javascript'sDate
object, so it can be used with familiar literal formats.If you need full featured Date formatting in your app's Javascript, use it. Otherwise if what you want to do is a one off, then concatenating getYear(), getMonth(), getDay() is probably easiest.
此线程中最流行的答案的一点简化版本 https://stackoverflow.com/a/3067896/5437379 :
Little bit simplified version for the most popular answer in this thread https://stackoverflow.com/a/3067896/5437379 :
您可以简单地使用这一行代码来获取年份中的日期
You can simply use This one line code to get date in year
使用padStart:
Use padStart:
或者
or
此代码修复了 Pierre Guilbert 的答案:(
即使在 10000 年后仍然有效)
This code is fix to Pierre Guilbert's answer:
(it works even after 10000 years)
回答另一个简单性问题可读性。
此外,不鼓励使用新方法编辑现有的预定义类成员:
Answering another for Simplicity & readability.
Also, editing existing predefined class members with new methods is not encouraged:
Day.js 怎么样?
只有 2KB,而且您还可以
dayjs().format('YYYY-MM-DD')
。https://github.com/iamkun/dayjs
How about Day.js?
It's only 2KB, and you can also
dayjs().format('YYYY-MM-DD')
.https://github.com/iamkun/dayjs
如果您不介意包含一个额外的(但很小)库,Sugar.js 提供了许多很好的功能来使用JavaScript 中的 日期。
要格式化日期,请使用 format 函数:
If you don't mind including an additional (but small) library, Sugar.js provides lots of nice functionality for working with dates in JavaScript.
To format a date, use the format function:
当我需要这样做时,我通常使用下面的代码。
解释一下,.slice(-2) 为我们提供了字符串的最后两个字符。
因此,无论如何,我们都可以在日期或月份中添加“0”,然后只要求最后两个,因为这些始终是我们想要的两个。
因此,如果 MyDate.getMonth() 返回 9,它将是:
因此添加 .slice(-2) 会给出最后两个字符,即:
但如果 date.getMonth() 返回 10,它将是:
所以添加.slice(-2) 给我们最后两个字符,或者:
I usually use the code below when I need to do this.
To explain, .slice(-2) gives us the last two characters of the string.
So no matter what, we can add "0" to the day or month, and just ask for the last two since those are always the two we want.
So if the MyDate.getMonth() returns 9, it will be:
so adding .slice(-2) on that gives us the last two characters which is:
But if date.getMonth() returns 10, it will be:
so adding .slice(-2) gives us the last two characters, or:
看来mootools提供了
Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date我不确定是否值得仅针对此特定任务包含在内。
It seems that mootools provides
Date().format()
: https://mootools.net/more/docs/1.6.0/Types/DateI'm not sure if it worth including just for this particular task though.