2017-10-13 96 views
1

我使用的是什么如何复制'新Date()'格式?

  • 角材料的日期选择器
  • Moment.js
  • 公司的FireStore

我在做什么

  • 瓦en创建一个新项目并将其添加到firestore,我使用'new Date()'添加日期'

  • 这创建了以下格式it firestore:2017年10月13日上午9:00:04 UTC +1

  • 这正是我想要的

  • 材料日期选择器读取这个完美的罚款,并显示13/10/2017

我想要做什么

  • 如果我编辑的项,然后从材料的日期选择器一个新的日期,然后点击更新,我想日期选择器值,这是目前一个字符串转换的18/12/2017(例如...)

  • 之前写回数据库,我想这种格式是像2017年12月18日在上午09时00分04秒UTC + 1

问题

  • 我怎么会去这样做呢?
  • 这是一个moment.js转换吗?
  • 或者有材料日期选择器可以帮助我的选项吗?

Component.html

<mat-form-field> 
 
    <input #newItemDate #picker matInput [matDatepicker]="picker" placeholder="Choose a date" (focus)="picker.open()" formControlName="item_date"> 
 
    <mat-datepicker #picker></mat-datepicker> 
 
</mat-form-field> 
 

 

 
<button (click)="dateTest(newItemDate.value)"> Test Date </button>

组件。TS

显然,这里不多:) - 但是,这是我需要有转换后的日期

dateTest(newItemDate) {  
 

 
    // newItemDate = 13/10/2017 
 

 
    // I need October 13, 2017 at 9:00:04 AM UTC+1 
 
    
 
    }

+0

在SO上,您应该尝试**自己编写代码**。后** [做更多的研究](//meta.stackoverflow.com/questions/261592)**如果你有问题,你可以**发布你已经尝试**与清楚的解释是什么是'工作**并提供** [最小,完整和可验证示例](// stackoverflow.com/help/mcve)**。 – Rob

+0

谢谢你的回应。我可以很容易地发布什么不工作,因此我在这里......不会改变我的问题和我需要帮助的东西。 – MegaTron

+0

您需要发布您尝试过的代码无效。一个简单的例子,不是所有的。 – Rob

回答

2

您可以使用内置的日期格式功能:

dateTest(newItemDate) {  

    var formatedDate = new Date(newItemDate); 

    // UTC Date 
    console.log(formatedDate.toUTCString()); 

    // ISO Date 
    console.log(formatedDate.toISOString()); 

    } 

链接StackBlitz Demo

+0

嗨费萨尔。我的日期区域设置可能设置为英国或美国。在你的例子中它是美国。当我在这种情况下设置为英国时,出现以下错误: “UTC =无效的日期”/“ISO = ERROR RangeError:无效的时间值” – MegaTron

+0

我已用美国模式对其进行了测试,结果完美。我可以像魅力一样读书写字。当我使用“dateAdapter.setLocale('en-gb');”时,它不起作用。 – MegaTron

+0

查看更新后的演示。我已经添加了将'en-GB'格式化为'en-US'格式的方法,然后继续进行日期转换。 – Faisal

2

你可以尝试做了一下出字符串和格式它像这样:

// dateTest(newItemDate) { 
 

 
// This way you can make a moment right from the string :) 
 
let newItemDate = moment('13/10/2017', 'DD/MM/YYYY').format("MMMM DD, YYYY H:MM:SS A Z"); 
 
console.log(newItemDate); 
 

 
// }
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

编辑:修复了片段中缺少的moment.js导入。

+0

嘿@OArnarsson!感谢您的回应! :)。我的控制台显示:您输入的日期是:1456444800000.这可能是一个材料日期选择器的东西? – MegaTron

+0

@MegaTron我已经更新了这个片段,它是否仍然给你时代? – OArnarsson

+0

嘿,伙计,谢谢!这看起来更接近。但是,时刻会向控制台记录一个错误:“moment.min.js:23弃用警告:提供的值不是以可识别的ISO格式。瞬间构造回退到js Date(),这在所有浏览器和版本中都不可靠。非ISO日期格式不鼓励,将在即将发布的主要版本中删除。有关详细信息,请参阅http://momentjs.com/guides/#/warnings/js-date/。“ – MegaTron