在我的Java脚本应用程序中,我以这样的格式存储日期:
2011-09-24
现在,当我尝试使用上面的值创建一个新的Date对象(这样我就可以以不同的格式检索日期)时,日期总是返回一天。见下文:
var date = new Date("2011-09-24");
console.log(date);
日志:
Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)
在我的Java脚本应用程序中,我以这样的格式存储日期:
2011-09-24
现在,当我尝试使用上面的值创建一个新的Date对象(这样我就可以以不同的格式检索日期)时,日期总是返回一天。见下文:
var date = new Date("2011-09-24");
console.log(date);
日志:
Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)
当前回答
您可以使用时刻库来格式化日期。 https://momentjs.com/
let format1 = "YYYY-MM-DD"
let date = new Date();
console.log(moment(date).format(format1))
EDIT
时刻现在已弃用,您可以使用date-fns format方法格式化日期。
import { format } from 'date-fns'
format(new Date(), "yyyy-MM-dd")
其他回答
JS DATE对象转换字符串时会发生一些疯狂的事情,例如考虑您提供的以下日期
注意:根据您所在的时区和当前时间,以下示例可能是一天假,也可能不是一天假。
new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
但是,如果我们将字符串格式重新排列为月-日-年…
new Date("09-24-2011");
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
另一个奇怪的
new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.
new Date("2011/09/24"); // change from "-" to "/".
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
在创建新的日期时,我们可以很容易地更改日期“2011-09-24”中的连字符
new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
如果我们有一个日期字符串,如“2011-09-24T00:00:00”
new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
现在像以前一样将连字符改为正斜杠;会发生什么呢?
new Date("2011/09/24T00:00:00");
// => Invalid Date.
我通常需要管理日期格式2011-09-24T00:00:00,所以这就是我所做的。
new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
更新
如果为Date构造函数提供单独的参数,则可以获得如下所述的其他有用输出
注意:参数可以是数字类型或字符串类型。我将展示带有混合值的示例。
获取给定年份的第一个月和第一天
new Date(2011, 0); // Normal behavior as months in this case are zero based.
// => Sat Jan 01 2011 00:00:00 GMT-0700 (MST)
一年中最后一个月和最后一天
new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
// => Sat Dec 31 2011 00:00:00 GMT-0700 (MST)
数字,字符串参数的例子。注意,这个月是3月,因为又是以零为基础的月份。
new Date(2011, "02");
// => Tue Mar 01 2011 00:00:00 GMT-0700 (MST)
如果我们做同样的事情,但是一天是0,我们得到的结果是不同的。
new Date(2011, "02", 0); // Again the zero roles back from March to the last day of February.
// => Mon Feb 28 2011 00:00:00 GMT-0700 (MST)
在任何年和月参数中添加0的一天将得到前一个月的最后一天。如果你继续用负数,你可以在另一天继续回滚
new Date(2011, "02", -1);
// => Sun Feb 27 2011 00:00:00 GMT-0700 (MST)
我遇到过这样的问题。但我的问题是off set,而从数据库获取日期。
这是在数据库中,它是UTC格式。
2019-03-29 19:00:00.0000000 +00:00
所以当我从数据库和检查日期,它是添加偏移量与它,并发送回javascript。
它正在添加+05:00,因为这是我的服务器时区。我的客户在不同的时区+07:00。
2019-03-28T19:00:00+05:00 //这是我在javascript中得到的。
所以这是我的解决方案,我所做的这个问题。
var dates = price.deliveryDate.split(/-|T|:/);
var expDate = new Date(dates[0], dates[1] - 1, dates[2], dates[3], dates[4]);
var expirationDate = new Date(expDate);
因此,当日期来自服务器,有服务器偏移量,所以我分割日期和删除服务器偏移量,然后转换为日期。它解决了我的问题。
如果希望获得本地时区某个日期的0小时,请将各个日期部分传递给date构造函数。
new Date(2011,08,24); // month value is 0 based, others are 1 based.
这个通过我循环,zzzBov的答案是+1。这是一个完整的转换日期,为我工作使用UTC方法:
//myMeeting.MeetingDate = '2015-01-30T00:00:00'
var myDate = new Date(myMeeting.MeetingDate);
//convert to JavaScript date format
//returns date of 'Thu Jan 29 2015 19:00:00 GMT-0500 (Eastern Standard Time)' <-- One Day Off!
myDate = new Date(myDate.getUTCFullYear(), myDate.getUTCMonth(), myDate.getUTCDate());
//returns date of 'Fri Jan 30 2015 00:00:00 GMT-0500 (Eastern Standard Time)' <-- Correct Date!
您可以使用时刻库来格式化日期。 https://momentjs.com/
let format1 = "YYYY-MM-DD"
let date = new Date();
console.log(moment(date).format(format1))
EDIT
时刻现在已弃用,您可以使用date-fns format方法格式化日期。
import { format } from 'date-fns'
format(new Date(), "yyyy-MM-dd")