Javascript 如何将ISO日期转换为日期格式yyyy mm dd?
如何从日期中获取格式为yyyy mm dd的日期 我的8601约会是Javascript 如何将ISO日期转换为日期格式yyyy mm dd?,javascript,date,Javascript,Date,如何从日期中获取格式为yyyy mm dd的日期 我的8601约会是 2013-03-10T02:00:00Z 我怎样才能得到以下信息 2013-03-10 试试这个 date = new Date('2013-03-10T02:00:00Z'); date.getFullYear()+'-' + (date.getMonth()+1) + '-'+date.getDate();//prints expected format. 更新:- 正如评论中指出的,我正在更新答案,以便在需要时打印
2013-03-10T02:00:00Z
我怎样才能得到以下信息
2013-03-10
试试这个
date = new Date('2013-03-10T02:00:00Z');
date.getFullYear()+'-' + (date.getMonth()+1) + '-'+date.getDate();//prints expected format.
更新:-
正如评论中指出的,我正在更新答案,以便在需要时打印日期和月份的前导零
date=新日期('2013-08-03T02:00:00Z');
年份=日期。getFullYear();
月=日期。getMonth()+1;
dt=date.getDate();
if(dt<10){
dt='0'+dt;
}
如果(月<10){
月份='0'+月份;
}
控制台日志(年+'-'+月+'-'+dt)代码>您可以签出,或者进行漂亮的日期处理
或者只提取ISO字符串的第一部分,它已经包含您想要的内容。
以下是T
上的示例:
“2013-03-10T02:00:00Z”。拆分(“T”)[0]/“2013-03-10”
另一个例子是前10个字符:
“2013-03-10T02:00:00Z”。substr(0,10)/“2013-03-10”
在日期对象中传递日期:
var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');
只需裁剪字符串:
var date = new Date("2013-03-10T02:00:00Z");
date.toISOString().substring(0, 10);
或者如果您只需要字符串外的日期
var strDate = "2013-03-10T02:00:00Z";
strDate.substring(0, 10);
将为您处理日期格式设置。下面是如何通过JavaScript标记包含它,然后是如何使用矩.js格式化日期的示例
力矩(“2013-03-10T02:00:00Z”)。格式(“YYYY-MM-DD”)/“2013-03-10”
这将以YYYY-MM-DD格式输出日期:
let date = new Date();
date = date.toISOString().slice(0,10);
let dt=新日期('2013-03-10T02:00:00Z');
设dd=dt.getDate();
设mm=dt.getMonth()+1;
设yyyy=dt.getFullYear();
如果(dd使用:
扩展:如果希望格式包含时间,可以将toTimeString()
添加到字符串中,然后去除GMT部分,如下所示:
var d = new Date('2013-03-10T02:00:00Z');
var fd = d.toLocaleDateString() + ' ' + d.toTimeString().substring(0, d.toTimeString().indexOf("GMT"));
我用了这个:
HTMLDatetoIsoDate(htmlDate){
let year = Number(htmlDate.toString().substring(0, 4))
let month = Number(htmlDate.toString().substring(5, 7))
let day = Number(htmlDate.toString().substring(8, 10))
return new Date(year, month - 1, day)
}
isoDateToHtmlDate(isoDate){
let date = new Date(isoDate);
let dtString = ''
let monthString = ''
if (date.getDate() < 10) {
dtString = '0' + date.getDate();
} else {
dtString = String(date.getDate())
}
if (date.getMonth()+1 < 10) {
monthString = '0' + Number(date.getMonth()+1);
} else {
monthString = String(date.getMonth()+1);
}
return date.getFullYear()+'-' + monthString + '-'+dtString
}
HTMLDatetoIsoDate(htmlDate){
let year=Number(htmlDate.toString().substring(0,4))
let month=Number(htmlDate.toString().substring(5,7))
let day=Number(htmlDate.toString().substring(8,10))
返回新日期(年、月-1、日)
}
isoDateToHtmlDate(isoDate){
let date=新日期(isoDate);
让dtString=''
让monthString=''
if(date.getDate()<10){
dtString='0'+date.getDate();
}否则{
dtString=String(date.getDate())
}
if(date.getMonth()+1<10){
monthString='0'+数字(date.getMonth()+1);
}否则{
monthString=String(date.getMonth()+1);
}
返回日期。getFullYear()++'-'+monthString++'-'+dtString
}
来源:对于单个用例来说,这是一个相当大的库。我建议改为使用。它基本上提供了矩.js的大部分功能,捆绑包的大小和数量要小得多
需要注意的一点是,由于它是时间格式,浏览器通常会从UTC时间转换为本地时区。虽然这是一个简单的用例,您可能可以执行'2013-03-10T02:00:00Z'。子字符串(0,10);
对于更复杂的转换日期fns
是一种方法。这是我仅为获取日期而做的:
let isoDate=“2013-03-10T02:00:00Z”;
警报(isoDate.split(“T”)[0]);
使用以下代码。它对您很有用
let currentDate = new Date()
currentDate.toISOString()
如果您有日期对象:
var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');
let date=新日期()
让结果=date.toISOString().split`T`[0]
console.log(结果)
var d=新日期(“2015年3月25日星期三05:30:00 GMT+0530(印度标准时间)”;
警报(d.toLocaleDateString());
let isoDate=“2013-03-10T02:00:00Z”;
var d=新日期(isoDate);
d、 toLocaleDateString('en-GB');//dd/mm/yyyy
d、 toLocaleDateString('en-US');//mm/dd/yyyy
对于所有使用拆分、切片和其他基于字符串的尝试获取日期的人,您可能会设置自己的时区相关失败
ISO字符串具有Zulu时区和与此时区对应的日期,这意味着它可能使用实际时区前一天或后一天的日期,您必须在转换链中考虑到这一点
参见此示例:
const timeZoneRelatedDate = new Date(2020, 0, 14, 0, 0);
console.log(timeZoneRelatedDate.toLocaleDateString(
'ja-JP',
{
year: 'numeric',
month: '2-digit',
day: '2-digit'
}
).replace(/\//gi,'-'));
// RESULT: "2020-01-14"
console.log(timeZoneRelatedDate.toISOString());
// RESULT: "2020-01-13T23:00:00.000Z" (for me in UTC+1)
console.log(timeZoneRelatedDate.toISOString().slice(0,10));
// RESULT: "2020-01-13"
答案的更好版本
如果安装了日期fns
,则可以使用此功能
你真的试过吗?这不是一个新问题,已经回答了多次。日期可能重复。拆分(“T”)[0]
请注意,我不认为这会打印带有@user3413723的day或monthAgree的前导零。这不会回答问题,因为它删除了前导零,因此不符合YY-MM-DD格式的要求。工作正常@mritunjay这比DriveByPoster的答案更长,更容易出现打字错误。但我不会给出答案向下投票,因为它更不懂语言。它只是不使用我们可以使用的简单工具。您可以简单地使用dt=dt.padStart(2,'0'),而不是两个if代码>和month=month.padStart(2,'0')代码>toLocaleDateString()将以“/”格式给出。不是“-”格式。您可以使用上面的“/”替换为“-”。如果toLocaleDateString发生了变化,那么这并不是最优雅的。toLocaleDateString的结果对于所有用户来说都不一致,因此很可能不会产生OP所需的结果。虽然这个代码片段可以解决这个问题,但确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满您的代码,因为这会降低代码和解释的可读性moment
是一个非常庞大的库,仅用于格式化。宁可使用体积小得多且功能相同的工具。@Hozefa,然后用你的解决方案回答OP问题。@Harris-工作做得很顺利!我希望矩有一些像.toISODateString()
这样的函数,因为这是非常常见的情况……我认为这是所有这些函数中最简单、最优雅的解决方案,但这有什么问题吗?@Aida_Aida我能想到的唯一问题是,如果你的代码
let currentDate = new Date()
currentDate.toISOString()
const timeZoneRelatedDate = new Date(2020, 0, 14, 0, 0);
console.log(timeZoneRelatedDate.toLocaleDateString(
'ja-JP',
{
year: 'numeric',
month: '2-digit',
day: '2-digit'
}
).replace(/\//gi,'-'));
// RESULT: "2020-01-14"
console.log(timeZoneRelatedDate.toISOString());
// RESULT: "2020-01-13T23:00:00.000Z" (for me in UTC+1)
console.log(timeZoneRelatedDate.toISOString().slice(0,10));
// RESULT: "2020-01-13"
const date = new Date(2019, 0, 2)
import { formatISO } from 'date-fns'
formatISO(date, { representation: 'date' }) // '2019-01-02' string