我在尝试使用TypeScript中的Date
对象来格式化我想要的方式时遇到了一些麻烦。
我有一个课程Module
,定义为:
export class Module {
constructor(public id: number, public name: string, public description: string,
public lastUpdated: Date, public owner: string) { }
getNiceLastUpdatedTime(): String {
let options: Intl.DateTimeFormatOptions = {
day: "numeric", month: "numeric", year: "numeric",
hour: "2-digit", minute: "2-digit"
};
return this.lastUpdated.toLocaleDateString("en-GB", options) + " " + this.lastUpdated.toLocaleTimeString("en-GB", options);
}
}
当我使用以下代码调用方法时:
let date = new Date(1478708162000); // 09/11/2016 16:16pm (GMT)
let module = new Module(1, "Test", "description", date, "test owner");
console.log(module.getNiceLastUpdatedTime());
我最终在控制台中打印了以下内容:
'9 November 2016 16:16:02 GMT'
我想看到的是:
09/11/2015 16:16
我已经查看了https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString上的文档,但我仍然无法看到我做错了什么(我知道这是一个JavaScript API文档,但是我&# 39;我非常确定TypeScript在幕后使用的是什么。
答案 0 :(得分:24)
如果您想要超时以及您想要的日期Date.toLocaleString()
。
这直接来自我的控制台:
> new Date().toLocaleString()
> "11/10/2016, 11:49:36 AM"
然后,您可以输入区域设置字符串和格式字符串以获得所需的精确输出。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
答案 1 :(得分:9)
在Angular 4中使用-正在运行。格式化日期的最佳方法是管道。
像这样创建自定义管道:
import { Pipe, PipeTransform} from '@angular/core';
import { DatePipe } from '@angular/common';
@Pipe({
name: 'dateFormat'
})
export class DateFormatPipe extends DatePipe implements PipeTransform {
transform(value: any, args?: any): any {
///MMM/dd/yyyy
return super.transform(value, "MMM/dd/yyyy");
}
}
,它在这样的TypeScript类中使用:
////my class////
export class MyComponent
{
constructor(private _dateFormatPipe:DateFormatPipe)
{
}
formatHereDate()
{
let myDate = this._dateFormatPipe.transform(new Date())//formatting current ///date here
//you can pass any date type variable
}
}
答案 2 :(得分:6)
选项1: Momentjs:
安装:
npm install moment --save
导入:
import * as moment from 'moment';
用法:
let formattedDate = (moment(yourDate)).format('DD-MMM-YYYY HH:mm:ss')
选项2:如果使用Angular,请使用DatePipe:
导入:
import { DatePipe } from '@angular/common';
用法:
const datepipe: DatePipe = new DatePipe('en-US')
let formattedDate = datepipe.transform(yourDate, 'DD-MMM-YYYY HH:mm:ss')
答案 3 :(得分:5)
我建议您使用MomentJS
随着时间的推移你可以有很多输出,而这一个09/11/2015 16:16
就是其中之一。
答案 4 :(得分:2)
这里是Angular的另一种选择(使用自己的格式设置功能)-该选项适用于格式:
YYYY-mm-dd hh:nn:ss
-您可以调整格式,只需重新排列行并更改分隔符即可
dateAsYYYYMMDDHHNNSS(date): string {
return date.getFullYear()
+ '-' + this.leftpad(date.getMonth() + 1, 2)
+ '-' + this.leftpad(date.getDate(), 2)
+ ' ' + this.leftpad(date.getHours(), 2)
+ ':' + this.leftpad(date.getMinutes(), 2)
+ ':' + this.leftpad(date.getSeconds(), 2);
}
leftpad(val, resultLength = 2, leftpadChar = '0'): string {
return (String(leftpadChar).repeat(resultLength)
+ String(val)).slice(String(val).length);
}
对于当前时间戳,请像这样使用:
const curTime = this.dateAsYYYYMMDDHHNNSS(new Date());
console.log(curTime);
将输出例如:2018-12-31 23:00:01
答案 5 :(得分:2)
如果你需要它的角度,最简单的代码最少的方法是:
u8
答案 6 :(得分:0)
再添加一个@kamalakar的答案,需要在app.module中导入相同的答案,并将DateFormatPipe添加到提供程序。
import {DateFormatPipe} from './DateFormatPipe';
@NgModule
({ declarations: [],
imports: [],
providers: [DateFormatPipe]
})
答案 7 :(得分:0)
import numpy as np
import matplotlib.pyplot as plt
import cv2
img = cv2.imread("foot.jpeg")
blur = cv2.blur(img,(5,10))
rows,cols,ch = img.shape
pts1 = np.float32([170,270],[480,220],[240, 710],[540,650])
pts2 = np.float32([0,0],[210,0],[0,297],[210,297])
M = cv2.getPerspectiveTransform(pts1,pts2)
dst = cv2.warpPerspective(img,M,(210,297))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.plot(*zip(*point), marker='.', color='r', ls='')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
答案 8 :(得分:0)
对于 Angular ,您应该只使用formatDate
而不是DatePipe
。
import {formatDate} from '@angular/common';
constructor(@Inject(LOCALE_ID) private locale: string) {
this.datePipeString = formatDate(Date.now(),'yyyy-MM-dd',this.locale);
}
答案 9 :(得分:-1)
这对我有用
/**
* Convert Date type to "YYYY/MM/DD" string
* - AKA ISO format?
* - It's logical and sortable :)
* - 20200227
* @param Date eg. new Date()
* https://stackoverflow.com/questions/23593052/format-javascript-date-as-yyyy-mm-dd
* https://stackoverflow.com/questions/23593052/format-javascript-date-as-yyyy-mm-dd?page=2&tab=active#tab-top
*/
static DateToYYYYMMDD(Date: Date): string {
let DS: string = Date.getFullYear()
+ '/' + ('0' + (Date.getMonth() + 1)).slice(-2)
+ '/' + ('0' + Date.getDate()).slice(-2)
return DS
}
您当然可以添加HH:MM这样的内容...
static DateToYYYYMMDD_HHMM(Date: Date): string {
let DS: string = Date.getFullYear()
+ '/' + ('0' + (Date.getMonth() + 1)).slice(-2)
+ '/' + ('0' + Date.getDate()).slice(-2)
+ ' ' + ('0' + Date.getHours()).slice(-2)
+ ':' + ('0' + Date.getMinutes()).slice(-2)
return DS
}
答案 10 :(得分:-2)
对我来说最好的解决方案是来自@Kamalakar的自定义管道,但稍作修改以允许传递格式:
import { Pipe, PipeTransform} from '@angular/core';
import { DatePipe } from '@angular/common';
@Pipe({
name: 'dateFormat'
})
export class DateFormatPipe extends DatePipe implements PipeTransform {
transform(value: any, format: any): any {
return super.transform(value, format);
}
}
然后称为:
console.log('Formatted date:', this._dateFormatPipe.transform(new Date(), 'MMM/dd/yyyy'));
答案 11 :(得分:-9)
我有类似的问题,我用这个解决了
.format();