如何将Date对象格式化为字符串?
当前回答
该模块可以轻松处理几乎所有的情况。它是一个更大的npm包的一部分,由Locutus提供,该包包含多种功能,但它可以完全独立于包本身使用,如果不使用npm(从模块更改为仅功能),只需复制粘贴/调整一点即可。
作为第二个参数,它接受时间戳,它可以来自任何地方,例如Date.getTime()。
此外,Locutus还在locatus包中维护了一个更大的datetime模块,这将提供一种更面向对象的使用方法。
在这里,您可以看到其他日期时间函数(作为模块),这些函数也非常有用。
您可以在这里找到关于参数和格式字符串的文档(注意,文档站点是一个PHP站点,但locatus实现遵循完全相同的规范)。
日期模块示例
date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400)//'07:09:40 m is month'
date('F j, Y, g:i a', 1062462400)//'September 2, 2003, 12:26 am'
date('Y W o', 1062462400)//'2003 36 2003'
var $x = date('Y m d', (new Date()).getTime() / 1000) $x = $x + '' var $result = $x.length // 2009 01 09 10
date('W', 1104534000) //'52'
date('B t', 1104534000) //'999 31'
date('W U', 1293750000.82); // 2010-12-31 '52 1293750000'
date('W', 1293836400); // 2011-01-01 '52'
date('W Y-m-d', 1293974054); // 2011-01-02 '52 2011-01-02'
其他回答
嗯,我想要的是将今天的日期转换为MySQL友好的日期字符串,如2012-06-23,并在我的一个查询中使用该字符串作为参数。我找到的简单解决方案是:
var today = new Date().toISOString().slice(0, 10);
请记住,上述解决方案没有考虑您的时区偏移。
您可以考虑改用此函数:
function toJSONLocal (date) {
var local = new Date(date);
local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return local.toJSON().slice(0, 10);
}
这将为您提供正确的日期,以防您在一天的开始/结束时执行此代码。
var date=新日期();函数到本地(日期){var local=新日期(日期);local.setMinutes(date.getMinutes()-date.getTimezoneOffset());return local.toJSON();}函数到JSONLocal(日期){var local=新日期(日期);local.setMinutes(date.getMinutes()-date.getTimezoneOffset());return local.toJSON().slice(0,10);}//查看您的devtools控制台console.log(date.toJSON());console.log(date.toISOString());console.log(toLocal(日期));console.log(toJSONLocal(日期));
日期.toISOString日期.toJSON字符串切片外部示例
已缩小2.39KB。一个文件。https://github.com/rhroyston/clock-js2010年8月10日为:
var str = clock.month
str.charAt(0).toUpperCase() + str.slice(1,3); //gets you "Aug"
console.log(clock.day + '-' + str + '-' + clock.year); //gets you 10-Aug-2010
尽管new Date().toISOString().slice(0,10);对于我的正常用例来说,这是一个非常时髦的风格,我不喜欢前几个更为定制的字符串的答案,我给了自己几分钟的时间,让自己尽可能地时髦一点。
我没有看到我提出的解决方案,所以这里是。。。
((d,x)=>`${d.getFullYear()}-${x(d.getMonth()+1)}-${x(d.getDate())}`)
(new Date(), (x)=>x.toString().padStart(2,"0"))
// today that produces
// '2022-09-28'
// the same as new Date().toISOString().slice(0, 10)
// but provides a good framework for other orders or values
伪IIFE获胜。
这里解决的问题当然是。。。
您可能需要使用前导零将天数和月份设置为小于10。因此,传入一个将强制转换为string&padStarts的函数。您需要在那里获得相同的日期,而不需要反复使用新的date()。获取“now”(newDate())并作为参数传入以供重用。你必须为getMonth添加1。这样做。
即使你需要映射到月份缩写之类的东西,你也可以使用类似的技巧,这并不是很可爱。
((d,x,y)=>`${x(d.getDate())} ${y(d.getMonth())} ${d.getFullYear()}`)
(
new Date(),
(x)=>x.toString().padStart(2,"0"),
(m)=>"jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec".split(',')[m]
)
// As of this writing, that yields...
// '28 sep 2022'
(显然,为了增加清晰度,两者都去掉了空格;不希望代码块滚动)
…尽管我很难推荐这样做,但出于某种奇怪的原因,我只能从控制台创建测试值。真的很奇怪,没有toString('yyyy-mm-dd'),这是我所能做到的。
不使用任何外部库的JavaScript解决方案:
var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate() + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)
一个简单的函数,可以返回日期、日期+时间或仅返回时间:
var myDate = dateFormatter("2019-01-24 11:33:24", "date-time");
// >> RETURNS "January 24, 2019 11:33:24"
var myDate2 = dateFormatter("2019-01-24 11:33:24", "date");
// >> RETURNS "January 24, 2019"
var myDate3 = dateFormatter("2019-01-24 11:33:24", "time");
// >> RETURNS "11:33:24"
function dateFormatter(strDate, format){
var theDate = new Date(strDate);
if (format=="time")
return getTimeFromDate(theDate);
else{
var dateOptions = {year:'numeric', month:'long', day:'numeric'};
var formattedDate = theDate.toLocaleDateString("en-US", + dateOptions);
if (format=="date")
return formattedDate;
return formattedDate + " " + getTimeFromDate(theDate);
}
}
function getTimeFromDate(theDate){
var sec = theDate.getSeconds();
if (sec<10)
sec = "0" + sec;
var min = theDate.getMinutes();
if (min<10)
min = "0" + min;
return theDate.getHours() + ':'+ min + ':' + sec;
}
推荐文章
- 如何将两个字符串相加,就好像它们是数字一样?
- 绑定多个事件到一个监听器(没有JQuery)?
- 在JavaScript中将JSON字符串解析为特定对象原型
- 将字符串“true”/“false”转换为布尔值
- 如何使用JavaScript代码获得浏览器宽度?
- event.preventDefault()函数在IE中无法工作
- indexOf()和search()的区别是什么?
- 错误:'types'只能在.ts文件中使用- Visual Studio Code使用@ts-check
- React-Native:应用程序未注册错误
- LoDash:从对象属性数组中获取值数组
- src和dist文件夹的作用是什么?
- jQuery UI对话框-缺少关闭图标
- SQL Developer只返回日期,而不是时间。我怎么解决这个问题?
- 如何使用AngularJS获取url参数
- 将RGB转换为白色的RGBA