我尝试将日期对象转换为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字符串日期格式中获取月份和日期?
答案 0 :(得分:1)
您的变量utcdate
是一个字符串,因此它没有getUTCMonth
或getUTCDate
方法。
再向下,您可以对未定义的变量调用getUTCFullYear
方法:date
。
最后,您尝试使用零填充的方式无效,因为mm
和dd
不是字符串,因此当您使用[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 +']');