Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将带时区的日期字符串转换为yyyy-mm-dd格式_Javascript_Date_Datetime_Locale - Fatal编程技术网

Javascript 将带时区的日期字符串转换为yyyy-mm-dd格式

Javascript 将带时区的日期字符串转换为yyyy-mm-dd格式,javascript,date,datetime,locale,Javascript,Date,Datetime,Locale,您好,我想知道是否可以转换此日期字符串: 2000年8月12日星期六00:00:00 GMT+0200(欧洲中部地区) 格式如下: 2000-08-12 我试过以下方法: var DateInput=“2000年8月12日星期六00:00:00格林尼治标准时间+0200(欧洲中部地区)”; var测试=新日期(DateInput); 控制台日志(测试); var convert_date=test.toString().split('-'); console.log(转换日期)这应该可以使用

您好,我想知道是否可以转换此日期字符串:

2000年8月12日星期六00:00:00 GMT+0200(欧洲中部地区)

格式如下:

2000-08-12
我试过以下方法:

var DateInput=“2000年8月12日星期六00:00:00格林尼治标准时间+0200(欧洲中部地区)”;
var测试=新日期(DateInput);
控制台日志(测试);
var convert_date=test.toString().split('-');

console.log(转换日期)
这应该可以使用
test.getFullYear()+“-”+test.getMonth()+1+“-”+test.getDate()
使用日期fns来操作日期,这是一个非常酷的现代JavaScript日期实用程序库

例:

链接:

实际上,我创建这个是为了准确地处理这类事情。它会扩展日期对象,只要您在站点中包含了可以使用的文件

var date = new Date(); 
date.formatDateTime('YDM')

通过使用Date对象,您还可以将希望格式化的日期设置为正常格式。

看起来您实际上只是在尝试重新格式化输入日期字符串(而不转换为本地时间)。您的尝试依赖于
Date
进行字符串解析,这是不推荐的(请参阅)。它还使用
toString
,它依赖于实现,不能依赖于将输出重新格式化为特定格式,如
yyyy-mm-dd

您不能只将日期字符串转换为
date
对象,然后依赖于
getDate()
等方法,因为这些方法返回的本地时间值可能不同于您试图从具有特定时区的输入日期字符串中保留的日期值

正如在其他答案中所指出的,有很多库可以用于这类事情。否则,您可以尝试以下几种方法(注意,日期字符串输入格式的变化可能会破坏这两种方法中的任何一种——因此库的存在)

这是我的功劳

如果日期字符串的格式与示例相同,只需解析字符串并根据需要重新格式化输出

const input='2000年8月12日星期六00:00:00格林威治标准时间+0200(欧洲中部地区)';
常量格式=(d)=>(d<10?'0':'')+d;
常量月=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月'];
//分析日期字符串(由于未使用时间部分,因此延迟)
让[day,m,d,yyyy,…time]=input.split(“”);
//月份和日期的两位数格式
设mm=格式(月数,指数f(m)+1);
设dd=格式(d);
//将日期格式化为yyyy mm dd
日期=yyyy+'-'+mm+'-'+dd;

控制台日志(日期)
test.getFullYear()+“-”+test.getDate()+“-”+(test.getMonth()+1)
您不能只执行根据位置、浏览器等返回不同结果的
new Date
操作。请参见@Liam,虽然我同意它看起来不错,但moment.js不仅仅是格式化日期,而且对于这么简单的东西,包含整个库就太过分了。我的回答给出了一小部分代码,它们完成了所要求的一件事。
var date = new Date(); 
date.formatDateTime('YDM')