将UTC时间转换为yyyymmdd格式Javascript

时间:2016-10-29 08:52:15

标签: javascript date

我尝试将日期对象转换为UTC,然后将其转换为yyyymmdd格式。 这是我的代码



var scheduleDate = '2016/10/29 17:00';
var d = new Date(scheduleDate);
var utcdate = d.toUTCString();

var mm = utcdate.getUTCMonth() + 1;
var dd = utcdate.getUTCDate();

alert( [date.getUTCFullYear(), !mm[1] && '0', mm, !dd[1] && '0', dd].join(''));




但我收到以下错误:

utcdate.getUTCMonth is not a function

如何从UTC字符串日期格式中获取月份和日期?

2 个答案:

答案 0 :(得分:1)

您的变量utcdate是一个字符串,因此它没有getUTCMonthgetUTCDate方法。

再向下,您可以对未定义的变量调用getUTCFullYear方法:date

最后,您尝试使用零填充的方式无效,因为mmdd不是字符串,因此当您使用[1]对其进行索引时,JavaScript会强制执行这些操作数字到Number个对象,但它们没有1属性,即使它们有两位数。因此,您总是可以获得填充0

如果您要通过先将这些数字强制转换为字符串来解决这个问题,那么它仍然无法正常工作,因为&&运算符在某些情况下会产生false,它将按原样输出:{{ 1}}。

长话短说,有更简单的方法来获得UTC的yyyymmdd日期格式。例如,从toISOString返回的false格式的左侧提取它:

yyyy-mm-ddThh:nn:ss.....

请注意,与当地时区的日期相比,UTC日期是在某一天休息的某个时刻。如果您需要阻止这种情况,那么我建议将toLocaleDateString与具有big-endian date format standard的区域设置一起使用,例如瑞典,立陶宛,匈牙利,韩国......:

var d = new Date('2016/10/29 17:00');

console.log(d.toISOString().replace(/-|T.*/g,''));

删除分隔符(date.toLocaleDateString('se') )只需更换非数字:

-

答案 1 :(得分:1)

如果已知日期是UTC时区,您可以使用Date.UTC()方法创建日期对象,然后您可以显示客户端(浏览器)时区的本地日期,如下所示:

//var scheduleDate = '2016/10/29 17:00';
// If known date is in UTC, create the date object like so:
var d = new Date(Date.UTC(2016,(10 - 1),29,17,0));

// UTC version of the date
var mmUTC = d.getUTCMonth() + 1;
var ddUTC = d.getUTCDate();
var hhUTC = d.getUTCHours();
// local to the browser (client) time zone
var mm = d.getMonth() + 1;
var dd = d.getDate();
var hh = d.getHours();

// display values
console.log('UTC values: hour:['+ hhUTC +'] month:['+ mmUTC +'] day:['+ ddUTC +']');
console.log('Client Time: hour:['+ hh +'] month:['+ mm +'] day:['+ dd +']');
console.log('Client yyyymmdd:['+ d.getFullYear() + ((mm < 10) ? '0'+ mm : mm) + dd +']');