Skip to content
This repository was archived by the owner on Feb 13, 2024. It is now read-only.

Commit 3971732

Browse files
authored
Merge pull request #66 from alecrem/support-24-hour-clock
Support 24 hour clock
2 parents 53e573a + 9d89dc3 commit 3971732

File tree

12 files changed

+57
-7
lines changed

12 files changed

+57
-7
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ Additional options for each picker: [disableButton]="false" (default)
3737
[disableInput]="false" (default) [disablePicker]="false" (default)
3838
[doNotCloseOnDateSet]="false" (default) Additional options for ngx-date-picker
3939
and ngx-datetime-picker: [min]="null" (default) [max]="null" (default)
40+
Additional options for ngx-time-picker and ngx-datetime-picker:
41+
[use24HourClock]="false" (default)
4042
```
4143
4244
## CSS

ngx-datetimepicker/src/app/app.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ <h2>Stand-alone</h2>
77
<ngx-datetime-picker [(selectedDateTime)]="dateTimeExample" [disableInput]="true"></ngx-datetime-picker>
88
<ngx-datetime-picker [(selectedDateTime)]="dateTimeExample" [disablePicker]="true"></ngx-datetime-picker>
99
<ngx-datetime-picker [(selectedDateTime)]="dateTimeExample" [doNotCloseOnDateSet]="true"></ngx-datetime-picker>
10+
<ngx-datetime-picker [(selectedDateTime)]="dateTimeExample" [use24HourClock]="true"></ngx-datetime-picker>
1011
<hr />
1112
<label>Date Picker</label>
1213
<ngx-date-picker [(selectedDate)]="dateExample" #pickerToFocus></ngx-date-picker>
@@ -24,6 +25,7 @@ <h2>Stand-alone</h2>
2425
<ngx-time-picker [(selectedTime)]="timeExample" [disableButton]="true"></ngx-time-picker>
2526
<ngx-time-picker [(selectedTime)]="timeExample" [disableInput]="true"></ngx-time-picker>
2627
<ngx-time-picker [(selectedTime)]="timeExample" [disablePicker]="true"></ngx-time-picker>
28+
<ngx-time-picker [(selectedTime)]="timeExample" [use24HourClock]="true"></ngx-time-picker>
2729

2830
<br>
2931
<button (click)="dateExample=null;timeExample=null;dateTimeExample=null;" >Clear All</button>

ngx-datetimepicker/src/app/date.component/date.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
[selectedMinute]="selectedMinute"
5252
(selectedHourChange)="setSelectedDate(highlightedDate,$event)"
5353
(selectedMinuteChange)="setSelectedDate(highlightedDate,null,$event)"
54+
[use24HourClock]="use24HourClock"
5455
></ngx-time>
5556
<div class="calendar--footer">
5657
<button type="button" class="ngx-picker--btn ngx-picker--btn__now" (click)="setSelectedDate(null); showMonthSelection = false; showYearSelection = false">Now</button>

ngx-datetimepicker/src/app/date.component/date.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export class DateComponent implements OnInit {
1414
@Input() doNotCloseOnDateSet: boolean = false;
1515
@Input() min: string = null;
1616
@Input() max: string = null;
17+
@Input() use24HourClock: boolean = false;
1718

1819
@Output() selectedDateChange = new EventEmitter<Date>();
1920
@Output() closeDatePicker = new EventEmitter<boolean>();

ngx-datetimepicker/src/app/dateTimePicker.component/dateTimePicker.component.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
</button>
1515
<ngx-date [hidden]="!pickerVisible" includeTime="true" [doNotCloseOnDateSet]="doNotCloseOnDateSet" (closeDatePicker)="closePicker($event)" (selectedDateChange)="newDatePicked($event)"
1616
[min]="min" [max]="max"
17+
[use24HourClock]="use24HourClock"
1718
[selectedDate]="selectedDateTime"> </ngx-date>
1819
</div>
1920
</div>

ngx-datetimepicker/src/app/dateTimePicker.component/dateTimePicker.component.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export class DateTimePickerComponent implements OnInit, ControlValueAccessor {
2525
@Input() doNotCloseOnDateSet: boolean = false;
2626
@Input() min: string = null;
2727
@Input() max: string = null;
28+
@Input() use24HourClock: boolean = false;
2829

2930
@Output() selectedDateTimeChange = new EventEmitter<Date>();
3031

@@ -39,6 +40,9 @@ export class DateTimePickerComponent implements OnInit, ControlValueAccessor {
3940
isMobile: boolean;
4041
invalid: boolean;
4142
get formattedDate() {
43+
if (this.use24HourClock) {
44+
return this.dateService.formatMMDDYYYY_HHMM(this.selectedDateTime);
45+
}
4246
return this.dateService.formatMMDDYYYY_HHMM_AMPM(this.selectedDateTime);
4347
}
4448
get mobileFormattedDate() {

ngx-datetimepicker/src/app/services/date.service.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ export class DateService {
5151
return `${this.formatMMDDYYYY(date)} ${this.formatHHMM_AMPM(hours, minutes)}`;
5252
}
5353

54+
formatMMDDYYYY_HHMM(date: Date): string {
55+
if (!date || typeof date == 'string') {
56+
return '';
57+
}
58+
const hours = date.getHours();
59+
const minutes = date.getMinutes();
60+
61+
return `${this.formatMMDDYYYY(date)} ${this.formatHHMM(hours, minutes)}`;
62+
}
63+
5464
formatHHMM_AMPM(hour: number, minute: number): string {
5565
if (hour == null || minute == null) {
5666
return '';
@@ -69,6 +79,16 @@ export class DateService {
6979
return `${hour}:${formattedMinute} am`;
7080
}
7181

82+
formatHHMM(hour: number, minute: number): string {
83+
if (hour == null || minute == null) {
84+
return '';
85+
}
86+
let formattedHour = (!hour ? '00' : (hour <= 9 ? `0${hour}` : hour));
87+
let formattedMinute = (!minute ? '00' : (minute <= 9 ? `0${minute}` : minute));
88+
89+
return `${formattedHour}:${formattedMinute}`;
90+
}
91+
7292
getCurrentMonthDays(month: number, year: number): dayOfTheMonth[] {
7393
let dayOfTheMonth = new Date(year, month - 1, 1);
7494
let nextMonth = new Date(year, month - 1, 1);

ngx-datetimepicker/src/app/time.component/time.component.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="time-picker">
2-
<button type="button" class="ngx-picker--btn ngx-picker--btn__hour" (click)="toggleHourMenu()">{{ formatSelectedHour }}</button>
3-
<button type="button" class="ngx-picker--btn ngx-picker--btn__minute" (click)="toggleMinuteMenu()">{{ formatSelectedMinute }}</button>
4-
<div class="time--periods">
2+
<button type="button" class="ngx-picker--btn ngx-picker--btn__hour" (click)="toggleHourMenu()" [class.ngx-picker--btn__24h]="use24HourClock">{{ formatSelectedHour }}</button>
3+
<button type="button" class="ngx-picker--btn ngx-picker--btn__minute" (click)="toggleMinuteMenu()" [class.ngx-picker--btn__24h]="use24HourClock">{{ formatSelectedMinute }}</button>
4+
<div class="time--periods" *ngIf="!use24HourClock">
55
<button type="button" class="ngx-picker--btn ngx-picker--btn__am" (click)="selectClockChange('am')" [class.ngx-picker--btn__selected]="selectedHour < 12">AM</button>
66
<button type="button" class="ngx-picker--btn ngx-picker--btn__pm" (click)="selectClockChange('pm')" [class.ngx-picker--btn__selected]="selectedHour >= 12">PM</button>
77
</div>

ngx-datetimepicker/src/app/time.component/time.component.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ export class TimeComponent implements OnInit {
1313
@Input() selectedMinute: number;
1414
@Output() selectedMinuteChange = new EventEmitter<number>();
1515

16+
@Input() use24HourClock: boolean = false;
17+
1618
public selectedClock: string;
1719

1820
public hours = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];
@@ -26,10 +28,14 @@ export class TimeComponent implements OnInit {
2628
}
2729

2830
get formatSelectedHour(): string {
29-
if (this.selectedHour == 12 || this.selectedHour == 0) {
30-
return '12';
31+
if (!this.use24HourClock) {
32+
if (this.selectedHour == 12 || this.selectedHour == 0) {
33+
return '12';
34+
}
35+
return <any>( this.selectedHour > 12 ? this.selectedHour - 12 : this.selectedHour);
36+
} else {
37+
return <any>( this.selectedHour < 10 ? '0' + this.selectedHour : this.selectedHour);
3138
}
32-
return <any>( this.selectedHour > 12 ? this.selectedHour - 12 : this.selectedHour);
3339
}
3440

3541
ngOnInit() {
@@ -42,6 +48,11 @@ export class TimeComponent implements OnInit {
4248
if (this.selectedHour >= 12) {
4349
this.selectedClock = 'pm';
4450
}
51+
if (this.use24HourClock) {
52+
this.hours = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23'];
53+
this.minutes = ['00', '05', '10', '15', '20', '25', '30', '35', '40', '45', '50', '55'];
54+
this.selectedClock = '';
55+
}
4556
}
4657

4758
selectHourChange(hour: number): void {

ngx-datetimepicker/src/app/timePicker.component/timePicker.component.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
</svg>
1414
</button>
1515
<div class="calendar" [hidden]="!pickerVisible">
16-
<ngx-time [selectedHour]="selectedHour" [selectedMinute]="selectedMinute" (selectedHourChange)="setHourNow($event)" (selectedMinuteChange)="setMinuteNow($event)"></ngx-time>
16+
<ngx-time [selectedHour]="selectedHour" [selectedMinute]="selectedMinute"
17+
[use24HourClock]="use24HourClock"
18+
(selectedHourChange)="setHourNow($event)" (selectedMinuteChange)="setMinuteNow($event)"></ngx-time>
1719
<div class="calendar--footer">
1820
<button type="button" class="ngx-picker--btn ngx-picker--btn__now" (click)="setTimeToNow()">Now</button>
1921
<button type="button" class="ngx-picker--btn ngx-picker--btn__close" (click)="closePicker()">Close</button>

0 commit comments

Comments
 (0)