我使用datepicker c角材料。这是代码:
<td [formGroup]="item">
<div class="input-group">
<div class="input-group-addon">
<mat-datepicker-toggle mdSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</div>
<input class="form-control" [matDatepicker]="picker" placeholder="Date" formControlName="date">
</div>
</td>
Datapicker的格式是在发送时将其发送到服务器。
但问题是这些值是在最后一天传输的。
例如,我选择1/18/2018
,但已发送到服务器2018-01-17T22: 00: 00.000Z
。
奇怪的是,日期的角度管道正确地转换日期,但在显示它之前,我在服务器上有一个请求按月分组,新月的第一天是在前一个月的最后一天
日期我存储在类型为Date的mongoose模式中。
也许有人对此有疑问。
谢谢。
答案 0 :(得分:5)
我通过将datepicker日期值转换为UTC来解决此问题。这是一个例子:
const d = new Date(<DATE FROM FORM FIELD>);
const date = Date.UTC(d.getFullYear(), d.getMonth(), d.getDate());
也许它不是优雅的方法来解决它但帮助我
答案 1 :(得分:0)
我有类似的问题。我通过将Datepicker配置为使用UTC日期来解决它。 (默认情况下使用本地时间) 只需在您的组件声明上添加一些提供程序即可:
import java.util.Scanner;
public class Stackoverflow {
public void newspaper() {
System.out.println("Question 4 \n");
double avg = 0;
int sum = 0;
int numYouth = 5;
int youth[] = new int[numYouth];
Scanner sc = new Scanner(System.in);
// The loop for calculating the average
for (int i = 0; i < 5; i++) {
System.out.println("Youth " + i + " How many was delivered?");
youth[i] = sc.nextInt();
sum = sum + youth[i];
avg = sum / numYouth;
}
System.out.println("Average is: " + avg + "\n");
double aboveAvg = 0;
// The loop for checking below of above average
for (int j = 0; j < 5; j++) {
if (youth[j] > avg) {
System.out.println("Youth " + j + " is above average");
} else {
System.out.println("Youth " + j + " below average");
}
}
}
public static void main(String[] args) {
new Stackoverflow().newspaper();
}
}
答案 2 :(得分:0)
与已接受的答案类似,但冗长一些,将保留小时/分钟/秒。
const dt = new Date(event.value);
const tz = dt.getTimezoneOffset();
const seconds = (dt.getTime() / 1000) - (tz * 60);
答案 3 :(得分:0)
您可以这样解决: 例如,如果您要在-> one_day_back_date_value
中获取日期var one_day_back_date_value = moment.tz(moment(date_value_from_backend), 0).format("YYYY-MM-DD");
date_value_from_backend = moment(one_day_back_date_value).toDate();
请注意:必须为此 moment 和 moment-timezone库。 在时刻-时区库上方包括 moment 库。
答案 4 :(得分:0)
如果您不使用moment或不想覆盖完整的date-datapter,则可以覆盖native-date-adapter
@Injectable({ providedIn: 'root' })
export class CustomDateAdapterService extends NativeDateAdapter {
public createDate(year: number, month: number, date: number): Date {
const localDate = super.createDate(year, month, date);
const offset = localDate.getTimezoneOffset() * 60000;
return new Date(localDate.getTime() - offset); // utcDate
}
}
答案 5 :(得分:0)
尝试一下,它解决了问题,与日期选择器无关
echo str_replace('id=','',$_SERVER["QUERY_STRING"]);
答案 6 :(得分:0)
对于使用Moment的用户,此问题已解决:
https://github.com/angular/components/issues/7167#issuecomment-385416948