конвертировать isoDatetime в формат dateTime - PullRequest
2 голосов
/ 28 октября 2019
Date d = new Date()
iso = d.toISOString()

это дает = 2019-10-28T11:23:52.384Z

, но я хочу в 2019-10-28T01:12 (YYYY-MM-DD T HH:MM AM/PM) только дату и время с AM / PM

, потому что в мобильном представлении даты время получает формат ISO.

enter image description here

Ответы [ 5 ]

1 голос
/ 28 октября 2019

Используйте moment.js

moment().format("YYYY-MM-DDThh:mm, A");

Или используйте Конструктор

 let d = new Date()
 let iso = moment(d).format("YYYY-MM-DDThh:mm, A");

получил: "2019-10-28T08:18, PM"

примечания:

2019-10-28T11:23:52.384Z

- это проверка формата ISO8601 вики или iso.org

0 голосов
/ 29 октября 2019

Я предлагаю вам использовать стандартную библиотеку js API Intl.DateTimeFormat . Они дают вам большой контроль и являются встроенными.

Они новые, но поддерживаются всеми браузерами, кроме MSIE.

const options = {
      year: 'numeric',
      month: 'numeric',
      day: 'numeric',
      hour: '2-digit',
      minute: 'numeric',
      hour12: true  // Gives you the AM PM
    };
// Note that the 'second' is omitted
// See 'timeZone' and 'timeZoneName' options if you want to control those.

const dateString = new Intl.DateTimeFormat( 'en-ca', options ).format( new Date() );

Обратите внимание, что я указал канадский английский длялокаль, потому что это одна из многих стран, которые приняли ISO 8601 в качестве рекомендуемого формата. Единственный недостаток «en-ca» заключается в том, что он добавляет запятую, но вы можете просто использовать string.replace, чтобы заменить его на «T».

0 голосов
/ 28 октября 2019

Вы можете вырезать компоненты даты и затем упорядочить их в нужном вам порядке.

Необходимо настроить часы и меридиан.

const DateComponenents = (() => {
  const fields = ['YYYY', 'MM', 'DD', 'HH', 'mm', 'ss', 'SSS'];
  const pattern = /^(\d{4})\-(\d{2})\-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.(\d{3})Z$/;
  return (date) => {
    return date.toISOString().match(pattern).slice(1).reduce((r, v, i) => {
      return Object.assign(r, { [fields[i]]: v });
    }, {});
  }
})();

function formatDate(date) {
  let c = DateComponenents(date);          // Extract the componenents
  let hours = parseInt(c['HH'], 10);       // Grab the 24-hour piece
  let meridiem = hours < 12 ? 'AM' : 'PM'; // Determine AM or PM
  hours %= 12;                             // Modular 0 - 12
  if (hours === 0) hours = 12;             // Shift 0am to 12am
  hours = ('00' + hours).substr(-2);       // Pad the hours
  return `${c['YYYY']}-${c['MM']}-${c['DD']} T ${hours}:${c['mm']} ${meridiem}`
}

console.log(formatDate(new Date()));
.as-console-wrapper { top: 0; max-height: 100% !important; }

Вот более динамичная версия, которая поддерживает пользовательское форматирование ...

const DateComponenents = (() => {
  const fields = ['YYYY', 'MM', 'DD', 'HH', 'mm', 'ss', 'SSS'];
  const pattern = /^(\d{4})\-(\d{2})\-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.(\d{3})Z$/;
  const applyRest = (c) => {
      let hours = parseInt(c['HH'], 10);
      let meridiem = hours < 12 ? 'AM' : 'PM';
      hours %= 12; hours = ('00' + (hours === 0 ? 12 : hours)).substr(-2);
      return Object.assign(c, { 'hh' : hours, 'A' : meridiem });
  }
  return (date) => {
    return applyRest(date.toISOString().match(pattern).slice(1).reduce((r, v, i) => {
      return Object.assign(r, { [fields[i]]: v });
    }, {}));
  };
})();

function formatDate(date, format) {
  return (c => format.replace(/\w+/g, key => c[key] || key))(DateComponenents(date));
}

console.log(formatDate(new Date(), 'YYYY-MM-DD T hh:mm A'));
.as-console-wrapper { top: 0; max-height: 100% !important; }
0 голосов
/ 28 октября 2019

Это полезно?

const pad = num => ("0" + num).slice(-2)
const d = new Date(2019, 9, 28, 3, 1, 1)
const iso = d.toISOString()
let [date, time] = iso.split("T")
const [_, hh, mm, ss, ampm] = new Date(iso).toLocaleTimeString('en-US').match(/(\d{1,2}):(\d{2}):(\d{2}) (\w{2})/)
console.log(date + "T" + pad(hh) + ":" + pad(mm) + " " + ampm)
0 голосов
/ 28 октября 2019

Вы можете использовать библиотеку JavaScript, известную как momentjs

Используя их функцию format, вы можете манипулировать форматом даты по своему вкусу.

для вашего случая,это должно быть

import moment from "moment"

let date = new Date();
let yyyymmdd = moment(date).format("YYYY-MM-DD");
let hhmm = moment(date).format("LT");
let ans = yyyymmdd + " T " + hhmm;

вывод:

2019-10-28 T 6:28 PM

кодовое поле

...