【问题标题】:How to convert a date created from timestamp in yyyy-MM-dd format如何转换从时间戳创建的日期为 yyyy-MM-dd 格式
【发布时间】:2018-09-19 08:07:59
【问题描述】:

假设有一个日期:

 var date_not_formatted=new Date(timestamp);
        var dateFormatted=new Date(date_not_formatted.getFullYear()+"-"+(date_not_formatted.getMonth()+1)+"-"+date_not_formatted.getDate());

我将此数据放入输入类型日期中,并在控制台中读取此警告:

The specified value "Sat Sep 15 2018 00:00:00 GMT+0200 (daylight savings time
 dell\u2019central Europe)" does not conform to the required format, "yyyy-MM-dd".

谁能帮帮我?

【问题讨论】:

  • Date.toString() 不返回 yyyy-MM-dd 格式的日期。您必须不要将 dateFormatted 转换为日期,并确保月份和日期有 2 位数字。
  • 查看您的错误,您的时间戳格式看起来像 javascript 控制台的默认输出。这真的不是一个好的起点(最后的时区描述打破了它)。序列化时间戳应该是某种标准的、机器可读的格式:ISO、自纪元以来的滴答声等(Date 构造函数可以愉快地吞下所有这些!yyyy-MM-dd 不是绝对必需的。)你能告诉我们什么是你的起始格式,也许是为什么?

标签: javascript html date datetime


【解决方案1】:

如果您想将日期转换为 yyyy-MM-dd,您可以这样做:

var timestamp = 1537345115000;
var date_not_formatted = new Date(timestamp);

var formatted_string = date_not_formatted.getFullYear() + "-";

if (date_not_formatted.getMonth() < 9) {
  formatted_string += "0";
}
formatted_string += (date_not_formatted.getMonth() + 1);
formatted_string += "-";

if(date_not_formatted.getDate() < 10) {
  formatted_string += "0";
}
formatted_string += date_not_formatted.getDate();

console.log(formatted_string);

注意:getMonth() 将返回一个从零开始的值。

【讨论】:

  • 当我将此日期放入我的输入类型日期时,我会收到相同的警告
  • 因为日期格式必须是yyyy-MM-dd 格式。例如,2018-09-19,而不是 2018-9-19
  • 应该if (date_not_formatted.getMonth() &lt; 9) 不是if (date_not_formatted.getMonth() &lt; 10)?如果我错了,请你解释为什么?
【解决方案2】:

这可能会帮助您准确地满足您的需求。但是有一些变量只是为了更好地理解目的。

//req_date is having the date in the required format
var dat = new Date();
var req_date = dat.getFullYear().toString()+'-';
var mon = (dat.getMonth()+1).toString();
if(mon.length == 1){
    req_date += '0'+mon+'-';
}
else{
    req_date += mon+'-'
}
var da = (dat.getDate()).toString();
if(da.length == 1){
    req_date += '0'+da;
}
else{
    req_date += da
}
//console.log(req_date)//Your try checking it in browser(Output:-2018-09-19).

【讨论】:

    【解决方案3】:

    你可以试试这个:

    var timestamp = 1537345115000;
    var date = new Date(timestamp);
    var dd_mm_yyyy = date.toLocaleDateString();
    var yyyy_mm_dd = dd_mm_yyyy.replace(/(\d+)\/(\d+)\/(\d+)/g, "$3-$2-$1");
    

    【讨论】:

      【解决方案4】:
      getFormattedDate(date) {
      
        const year  = date.getFullYear(),
              month = ('0' + (date.getMonth() + 1)).slice(-2),
              day   = date.getDate()
      
        return [year, month, day].join('-')
      }
      

      也可以是单线,但为了更清楚,我已将其分解。

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2017-08-21
        • 2013-09-16
        • 2014-06-11
        • 2020-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        相关资源
        最近更新 更多