Git Product home page Git Product logo

date_time's Introduction

date_time's People

Contributors

andrewpiterov avatar eeqk avatar lhengl avatar westito avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

date_time's Issues

consider change named args to match Duration and arg conventions.

Not a big issue but the named arguments on Time are inconsistent with Duration.

The Dart Duration class fully spells out each argument rather than using abbreviations.
In my opinion using a pattern consistent with Dart would make the library easier to use.

I also note some odd inconsistency between the Date and the Time ctors:

const Date(
this.year,
this.month,
this.day,
);

const Time(
this.hours, {
this.mins = 0,
this.secs = 0,
})

I guess the argument was that defaults for min and seconds made some sense.

I would argue that all of the args should be named parameters.

I don't like method signatures that have multiple arguments with the same type. It's way too easy to pass them in the wrong order. Using named arguments makes these type of mistakes obvious.

value is not updating after setState

Hi All,
I have a problem of refreshing my DateTimeFormField after a setState update, do someone having the same problem or I am just missing the right code?

Here is my code:
DateTimeFormField( initialValue: myInitialValue, decoration: const InputDecoration( suffixIcon: Icon(Icons.event_note), labelText: 'Time line', ), mode: DateTimeFieldPickerMode.date, onDateSelected: (DateTime value) { myInitialValue = value; }, ),
Then hope to see the date changing after a:
setState(() { myInitialValue = value; });

I was hoping to have something like a controller here but can't find it.

Thanks in advance

Need a Date.fromStr

I'm just rolling this into a project and the first issue is that I need to be able to parse dates.

I'm pulling DateTime objects from mysql which come back as strings.

It would be great if the package had a Date.fromStr method to match the Time.fromStr method.

Ideally it would accept a format string:
.e.g.

Dart.fromStr(datetime, 'YYYY:MM:DD');

One other little inconsistency is that the Dart libraries use parse rather than fromStr.

e.g.
int.parse
int.tryParse

It would be lovely if your library followed this convention (including the tryParse variant).

I'm not going to have the time to make a PR but happy to donate the following if any of it is useful.

Also here is a class I wrote some time ago that has a few extra methods you might be able to use :

import 'package:meta/meta.dart';

import 'local_time.dart';

/// Provides a class which wraps a DateTime but just supplies
/// the date component.
@immutable
class LocalDate {
  ///
  final DateTime date;

  ///
  int get weekday => date.weekday;

  ///
  int get year => date.year;

  ///
  int get month => date.month;

  ///
  int get day => date.day;

  /// Creates a [LocalDate] with the date set to today's date.
  /// This is the same as calling [LocalDate()].
  /// required by json.
  LocalDate(int year, int month, int day)
      : date = DateTime(year, month, day, 0, 0);

  /// Creates a ]LocalDate] by taking the date component of the past
  /// DateTime.
  LocalDate.fromDateTime(DateTime dateTime) : date = stripTime(dateTime);

  /// Converts a LocalDate to a DateTime.
  /// If you passed in [time] then
  /// That time is set as the time component
  /// on the resulting DateTime.
  /// If [time] not passed it is set to midnight at the start of this
  /// [LocalDate].
  DateTime toDateTime(
          {LocalTime time = const LocalTime(hour: 24, minute: 0, second: 0)}) =>
      DateTime(
          date.year, date.month, date.day, time.hour, time.minute, time.second);

  ///
  static DateTime stripTime(DateTime dateTime) =>
      DateTime(dateTime.year, dateTime.month, dateTime.day);

  /// Creates a [LocalDate] with todays date.
  LocalDate.today() : date = stripTime(DateTime.now());

  ///
  LocalDate addDays(int days) =>
      LocalDate.fromDateTime(date.add(Duration(days: days)));

  ///
  LocalDate subtractDays(int days) =>
      LocalDate.fromDateTime(date.subtract(Duration(days: days)));

  ///
  bool isAfter(LocalDate rhs) => date.isAfter(rhs.date);

  ///
  bool isAfterOrEqual(LocalDate rhs) => isAfter(rhs) || isEqual(rhs);

  ///
  bool isBefore(LocalDate rhs) => date.isBefore(rhs.date);

  ///
  bool isBeforeOrEqual(LocalDate rhs) => isBefore(rhs) || isEqual(rhs);

  ///
  bool isEqual(LocalDate rhs) => date.compareTo(rhs.date) == 0;

  ///
  LocalDate add(Duration duration) =>
      LocalDate.fromDateTime(date.add(duration));

  /// returns the no. of days between this date and the
  /// passed [other] date.
  int daysBetween(LocalDate other) => date.difference(other.date).inDays;
}
import 'package:meta/meta.dart';

import 'format.dart';
import 'local_date.dart';

/// Provides a class which wraps a DateTime but just supplies
/// the time component.
/// The hour component uses a 24 hour clock.
@immutable
class LocalTime {
  ///
  final int hour;

  ///
  final int minute;

  ///
  final int second;

  ///
  const LocalTime({required this.hour, required this.minute, this.second = 0});

  ///
  LocalTime.fromDateTime(DateTime dateTime)
      : hour = dateTime.hour,
        minute = dateTime.minute,
        second = dateTime.second;

  ///
  DateTime toDateTime() {
    final now = DateTime.now();

    return DateTime(now.year, now.month, now.day, hour, minute, second);
  }

  ///
  static DateTime stripDate(DateTime dateTime) => DateTime(
      0,
      0,
      0,
      dateTime.hour,
      dateTime.minute,
      dateTime.second,
      dateTime.millisecond,
      dateTime.microsecond);

  ///
  static LocalTime now() {
    final now = DateTime.now();

    return LocalTime(hour: now.hour, minute: now.minute, second: now.second);
  }

  ///
  LocalTime addDuration(Duration duration) =>
      LocalTime.fromDateTime(toDateTime().add(duration));

  ///
  bool isAfter(LocalTime rhs) =>
      hour > rhs.hour ||
      (hour == rhs.hour && minute > rhs.minute) ||
      (hour == rhs.hour && minute == rhs.minute && second > rhs.second);

  ///
  bool isAfterOrEqual(LocalTime rhs) => isAfter(rhs) || isEqual(rhs);

  ///
  bool isBefore(LocalTime rhs) => !isAfter(rhs) && !isEqual(rhs);

  ///
  bool isBeforeOrEqual(LocalTime rhs) => isBefore(rhs) || isEqual(rhs);

  ///
  bool isEqual(LocalTime rhs) =>
      hour == rhs.hour && minute == rhs.minute && second == rhs.second;

  ///
  DateTime atDate(LocalDate date) =>
      DateTime(date.year, date.month, date.day, hour, minute, second);

  @override
  String toString() => Format.localTime(this);
}
import 'package:intl/intl.dart';

import 'local_date.dart';
import 'local_time.dart';

// ignore: avoid_classes_with_only_static_members
///
class Format {
  ///
  /// Formats the Duration to H:mm
  ///
  /// @param duration
  /// @param showSuffix if true then a suffix such as 'secs'
  ///  is added to the string.
  ///   defaults to true.
  /// @return a blank string if duration is null otherwise
  /// the duration as per the format.
  ///
  ///
  static String duration(Duration? duration, {bool showSuffix = true}) {
    if (duration == null) {
      return '';
    }

    if (duration.inHours >= 1) {
      // h:mm
      return '${duration.inHours}'
          ':'
          '${(duration.inMinutes % 60).toString().padLeft(2, '0')}'
          '${showSuffix ? ' min' : ''}';
    } else {
      return '${duration.inMinutes.toString()}'
          ':${(duration.inSeconds % 60).toString().padLeft(2, '0')}'
          '${showSuffix ? ' secs' : ''}';
    }
  }

  ///
  static String localDate(LocalDate date, [String pattern = 'yyyy/MM/dd']) =>
      DateFormat(pattern).format(date.toDateTime());

  ///
  static String dateTime(DateTime date,
          [String pattern = 'yyyy/MM/dd h:ss a']) =>
      DateFormat(pattern).format(date);

  /// Tries to output the date and time in the minimal format possible/*
  /// If its today just show the time.
  /// If the date is in the last week we show the day name and the time.
  ///  If the date is older than 7 days show the date and the time.
  static String formatNice(DateTime when) {
    final today = LocalDate.today();
    final whenDate = LocalDate.fromDateTime(when);

    if (whenDate.isEqual(today)) {
      // for today just the time.
      return dateTime(when, 'h:mm a');
    } else if (whenDate.add(const Duration(days: 7)).isAfter(today)) {
      // use the day name for the last 7 days.
      return dateTime(when, 'EEEE h:mm a');
    } else {
      return dateTime(when, 'dd MMM h:mm a');
    }
  }

  ///
  static String smartFormat(DateTime date,
          [String pattern = 'yyyy/MM/dd h:ss a']) =>
      DateFormat(pattern).format(date);

  ///
  static String time(DateTime date, [String pattern = 'h:mm:ss a']) =>
      DateFormat(pattern).format(date);

  ///
  static String localTime(LocalTime time, [String pattern = 'h:mm:ss a']) =>
      Format.time(time.toDateTime(), pattern);

  ///
  /// Makes the first character of each word upper case
  ///
  ///  @param name
  /// @return
  ///
  static String toProperCase(String name) {
    final parts = name.split(' ');

    final result = StringBuffer();
    for (var i = 0; i < parts.length; i++) {
      var word = parts[i];
      if (word.length == 1) {
        word = word.toUpperCase();
      } else if (word.length > 1) {
        word = word.substring(0, 1).toUpperCase() +
            word.substring(1).toLowerCase();
      }

      if (result.length > 0) result.write(' ');

      result.write(word);
    }
    return result.toString();
  }

  ///
  /// Creates a date string suitable for insertion in a message like:
  /// 'We will contact you ${Format.onDate(date)}
  ///
  /// Which results in:
  /// 'tomorrow' if the date is tomorrow
  ///  a day name for the next 7 days in the form: 'on Wednesday'
  /// a day/month if it is within the next year.
  /// a date after that 'on the 2019/7/8'
  ///
  static String onDate(LocalDate date, {bool abbr = false}) {
    String message;

    if (date.isEqual(LocalDate.today())) {
      // not certain this variation makes much sense?
      message = abbr ? 'today' : 'later today';
    } else if (date.addDays(-1).isEqual(LocalDate.today())) {
      message = 'tomorrow';
    } else if (date.addDays(-7).isBefore(LocalDate.today())) {
      if (abbr) {
        message = DateFormat('EEE.').format(date.toDateTime());
      } else {
        message = 'on ${DateFormat('EEEE').format(date.toDateTime())}';
      }
    } else if (date.addDays(-364).isBefore(LocalDate.today())) {
      final ordinal = getDayOrdinal(date);
      if (abbr) {
        final format = '''d'$ordinal' MMM.''';
        message = DateFormat(format).format(date.toDateTime());
      } else {
        final format = '''d'$ordinal' 'of' MMMM''';
        message = 'on the ${DateFormat(format).format(date.toDateTime())}';
      }
    } else {
      message = 'on the ${Format.localDate(date)}';
    }
    return message;
  }

  ///
  static String getDayOrdinal(LocalDate date) {
    final day = date.day % 10;

    var ordinal = 'th';

    if (day == 1) {
      ordinal = 'st';
    } else if (day == 2) {
      ordinal = 'nd';
    } else if (day == 3) {
      ordinal = 'rd';
    }

    return ordinal;
  }

  /*

	static final DateFormat dateFormat = DateFormat('dd-MM-yyyy');

	static final DateFormat saasuDateFormat = DateFormat('yyyy-MM-dd');

	static final DateFormat dateWithMonthFormat = DateFormat('dd MMM yyyy');

	static const DateFormat dateFormatTime = DateFormat('dd-MM-yyyy hh:mma');

	static final DateFormat timeFormat = DateFormat('hh:mma');



	{
    return (date == null ? '' : formatter.format(date));

	}


	 static String formatWithMonth(DateTime date)
	{
		return format(date, dateWithMonthFormat);
	}

	 static String format(DateTime dateTime)
	{
		return format(dateTime, dateFormatTime);
	}

	 static String format(DateTime dateTime, String pattern)
	{
		return format(dateTime, DateFormat(pattern));
	}



	 static String format(LocalTime time, String pattern)
	{
		return format(time, DateFormat(pattern));
	}

	 static String format(DateTime date, DateFormat formater)
	{
		return (date == null ? '' : date.format(formater));
	}

	 static String format(LocalTime time, DateFormat formater)
	{
		return (time == null ? '' : time.format(formater));
	}

	/*
	 * If its today just show the time.
	 * If the date is in the last week we show the day name and the time.
	 * If the date is older than 7 days show the date and the time.
	 */
	 static String formatNice(DateTime when)
	{
		DateTime today = DateTime.now();

		if (when.toDateTime().equals(today))
		{
			// for today just the time.
			return Format.format(when, DateFormat('h:mm a'));
		}
		else

		if (when.plusDays(7).toDateTime().isAfter(today))
		{
			// use the day name for the last 7 days.
			return Format.format(when, DateFormat('EEEE h:mm a'));

		}
		else
			return Format.format(when, DateFormat('dd MMM h:mm a'));

	}

	/**
	 * If the date is today we just display the time. If the date is
   * NOT today we just display the date.
	 *
	 * @param dateTime
	 * @return
	 */
	 static String formatMinimal(DateTime dateTime)
	{
		if (dateTime.toDateTime().equals(DateTime.now()))
			return format(dateTime.toLocalTime());
		else
			return format(dateTime.toDateTime());
	}

	 static String format(LocalTime time)
	{
		return (time == null ? '' : time.format(timeFormat));
	}

	 static String saasuFormat(DateTime date)
	{
		return (date == null ? '' : date.format(saasuDateFormat));
	}



	 static String formatHHmm(Duration duration)
	{
		if (duration == null)
			return '';
		return DurationFormatUtils.formatDuration(duration.toMillis(), 'H:mm');
	}

	/**
	 * Formats the Duration to the given format.
   * Formats support are any supported by
	 * {@link DurationFormatUtils.formatDuration}
	 *
	 * @param duration
	 * @param format to render duration to.
	 * @return a blank string if duration is null
   * otherwise the duration as per the format.
	 */
	 static String format(Duration duration, String format)
	{

		return (duration == null ? ''
      : DurationFormatUtils.formatDuration(duration.toMillis(), format));
	}

*/

}

///
class AMPMParts {
  ///
  late final int hour;

  ///
  late final int minute;

  ///
  late final int second;

  ///
  late final bool am;

  ///
  AMPMParts.fromLocalTime(LocalTime time) {
    minute = time.minute;
    second = time.second;

    if (time.hour == 0) {
      hour = 12;
      am = true;
    } else if (hour == 12) {
      hour = 12;
      am = false;
    } else if (time.hour > 12) {
      hour = time.hour - 12;
      am = false;
    } else {
      hour = time.hour;
      am = true;
    }
  }
}
import 'package:intl/intl.dart';

import 'local_date.dart';
import 'local_time.dart';

// ignore: avoid_classes_with_only_static_members
///
class Format {
  ///
  /// Formats the Duration to H:mm
  ///
  /// @param duration
  /// @param showSuffix if true then a suffix such as 'secs'
  ///  is added to the string.
  ///   defaults to true.
  /// @return a blank string if duration is null otherwise
  /// the duration as per the format.
  ///
  ///
  static String duration(Duration? duration, {bool showSuffix = true}) {
    if (duration == null) {
      return '';
    }

    if (duration.inHours >= 1) {
      // h:mm
      return '${duration.inHours}'
          ':'
          '${(duration.inMinutes % 60).toString().padLeft(2, '0')}'
          '${showSuffix ? ' min' : ''}';
    } else {
      return '${duration.inMinutes.toString()}'
          ':${(duration.inSeconds % 60).toString().padLeft(2, '0')}'
          '${showSuffix ? ' secs' : ''}';
    }
  }

  ///
  static String localDate(LocalDate date, [String pattern = 'yyyy/MM/dd']) =>
      DateFormat(pattern).format(date.toDateTime());

  ///
  static String dateTime(DateTime date,
          [String pattern = 'yyyy/MM/dd h:ss a']) =>
      DateFormat(pattern).format(date);

  /// Tries to output the date and time in the minimal format possible/*
  /// If its today just show the time.
  /// If the date is in the last week we show the day name and the time.
  ///  If the date is older than 7 days show the date and the time.
  static String formatNice(DateTime when) {
    final today = LocalDate.today();
    final whenDate = LocalDate.fromDateTime(when);

    if (whenDate.isEqual(today)) {
      // for today just the time.
      return dateTime(when, 'h:mm a');
    } else if (whenDate.add(const Duration(days: 7)).isAfter(today)) {
      // use the day name for the last 7 days.
      return dateTime(when, 'EEEE h:mm a');
    } else {
      return dateTime(when, 'dd MMM h:mm a');
    }
  }

  ///
  static String smartFormat(DateTime date,
          [String pattern = 'yyyy/MM/dd h:ss a']) =>
      DateFormat(pattern).format(date);

  ///
  static String time(DateTime date, [String pattern = 'h:mm:ss a']) =>
      DateFormat(pattern).format(date);

  ///
  static String localTime(LocalTime time, [String pattern = 'h:mm:ss a']) =>
      Format.time(time.toDateTime(), pattern);

  ///
  /// Makes the first character of each word upper case
  ///
  ///  @param name
  /// @return
  ///
  static String toProperCase(String name) {
    final parts = name.split(' ');

    final result = StringBuffer();
    for (var i = 0; i < parts.length; i++) {
      var word = parts[i];
      if (word.length == 1) {
        word = word.toUpperCase();
      } else if (word.length > 1) {
        word = word.substring(0, 1).toUpperCase() +
            word.substring(1).toLowerCase();
      }

      if (result.length > 0) result.write(' ');

      result.write(word);
    }
    return result.toString();
  }

  ///
  /// Creates a date string suitable for insertion in a message like:
  /// 'We will contact you ${Format.onDate(date)}
  ///
  /// Which results in:
  /// 'tomorrow' if the date is tomorrow
  ///  a day name for the next 7 days in the form: 'on Wednesday'
  /// a day/month if it is within the next year.
  /// a date after that 'on the 2019/7/8'
  ///
  static String onDate(LocalDate date, {bool abbr = false}) {
    String message;

    if (date.isEqual(LocalDate.today())) {
      // not certain this variation makes much sense?
      message = abbr ? 'today' : 'later today';
    } else if (date.addDays(-1).isEqual(LocalDate.today())) {
      message = 'tomorrow';
    } else if (date.addDays(-7).isBefore(LocalDate.today())) {
      if (abbr) {
        message = DateFormat('EEE.').format(date.toDateTime());
      } else {
        message = 'on ${DateFormat('EEEE').format(date.toDateTime())}';
      }
    } else if (date.addDays(-364).isBefore(LocalDate.today())) {
      final ordinal = getDayOrdinal(date);
      if (abbr) {
        final format = '''d'$ordinal' MMM.''';
        message = DateFormat(format).format(date.toDateTime());
      } else {
        final format = '''d'$ordinal' 'of' MMMM''';
        message = 'on the ${DateFormat(format).format(date.toDateTime())}';
      }
    } else {
      message = 'on the ${Format.localDate(date)}';
    }
    return message;
  }

  ///
  static String getDayOrdinal(LocalDate date) {
    final day = date.day % 10;

    var ordinal = 'th';

    if (day == 1) {
      ordinal = 'st';
    } else if (day == 2) {
      ordinal = 'nd';
    } else if (day == 3) {
      ordinal = 'rd';
    }

    return ordinal;
  }

  /*

	static final DateFormat dateFormat = DateFormat('dd-MM-yyyy');

	static final DateFormat saasuDateFormat = DateFormat('yyyy-MM-dd');

	static final DateFormat dateWithMonthFormat = DateFormat('dd MMM yyyy');

	static const DateFormat dateFormatTime = DateFormat('dd-MM-yyyy hh:mma');

	static final DateFormat timeFormat = DateFormat('hh:mma');



	{
    return (date == null ? '' : formatter.format(date));

	}


	 static String formatWithMonth(DateTime date)
	{
		return format(date, dateWithMonthFormat);
	}

	 static String format(DateTime dateTime)
	{
		return format(dateTime, dateFormatTime);
	}

	 static String format(DateTime dateTime, String pattern)
	{
		return format(dateTime, DateFormat(pattern));
	}



	 static String format(LocalTime time, String pattern)
	{
		return format(time, DateFormat(pattern));
	}

	 static String format(DateTime date, DateFormat formater)
	{
		return (date == null ? '' : date.format(formater));
	}

	 static String format(LocalTime time, DateFormat formater)
	{
		return (time == null ? '' : time.format(formater));
	}

	/*
	 * If its today just show the time.
	 * If the date is in the last week we show the day name and the time.
	 * If the date is older than 7 days show the date and the time.
	 */
	 static String formatNice(DateTime when)
	{
		DateTime today = DateTime.now();

		if (when.toDateTime().equals(today))
		{
			// for today just the time.
			return Format.format(when, DateFormat('h:mm a'));
		}
		else

		if (when.plusDays(7).toDateTime().isAfter(today))
		{
			// use the day name for the last 7 days.
			return Format.format(when, DateFormat('EEEE h:mm a'));

		}
		else
			return Format.format(when, DateFormat('dd MMM h:mm a'));

	}

	/**
	 * If the date is today we just display the time. If the date is
   * NOT today we just display the date.
	 *
	 * @param dateTime
	 * @return
	 */
	 static String formatMinimal(DateTime dateTime)
	{
		if (dateTime.toDateTime().equals(DateTime.now()))
			return format(dateTime.toLocalTime());
		else
			return format(dateTime.toDateTime());
	}

	 static String format(LocalTime time)
	{
		return (time == null ? '' : time.format(timeFormat));
	}

	 static String saasuFormat(DateTime date)
	{
		return (date == null ? '' : date.format(saasuDateFormat));
	}



	 static String formatHHmm(Duration duration)
	{
		if (duration == null)
			return '';
		return DurationFormatUtils.formatDuration(duration.toMillis(), 'H:mm');
	}

	/**
	 * Formats the Duration to the given format.
   * Formats support are any supported by
	 * {@link DurationFormatUtils.formatDuration}
	 *
	 * @param duration
	 * @param format to render duration to.
	 * @return a blank string if duration is null
   * otherwise the duration as per the format.
	 */
	 static String format(Duration duration, String format)
	{

		return (duration == null ? ''
      : DurationFormatUtils.formatDuration(duration.toMillis(), format));
	}

*/

}

///
class AMPMParts {
  ///
  late final int hour;

  ///
  late final int minute;

  ///
  late final int second;

  ///
  late final bool am;

  ///
  AMPMParts.fromLocalTime(LocalTime time) {
    minute = time.minute;
    second = time.second;

    if (time.hour == 0) {
      hour = 12;
      am = true;
    } else if (hour == 12) {
      hour = 12;
      am = false;
    } else if (time.hour > 12) {
      hour = time.hour - 12;
      am = false;
    } else {
      hour = time.hour;
      am = true;
    }
  }
}

Thank you!

Just found your package and wanted to say thank you.

It's exactly what I needed.

Excellent Package

Hi,

I just want to say that this is an excellent package working with date separately to time. I was looking to build my own wrapper package for the DateTime class to achieve something similar. Luckily I found your package.

The key feature that stood out to me is the ability to use a const constructor as a default value. DateTime used to have this, but no longer. This makes it hard to work with the freezed package when all you want is a default value instead of using a required field.

Some other features I'd like added:

  1. The ability to show the difference in duration between 2 date values or 2 time values (currently can only be done with 1 date value and duration)
  2. The ability to pass a format to Date, DateRange, and TimeRange classes (currently only time is formattable)
  3. Introduce another class for DateAndTime to wrap DateTime so that it can be used as default values. This will just be a direct port from the DateTime class.
  4. More comparison for date ranges, such as:
    1. DateRange isWithin another dateRange
    2. DateRange encapsulates another dateRange (this.start < other.start && this.end > than other.end)
    3. DateRange is equal to, after, before, or overlap another date range
  5. Convenient default values such as:
    1. Date.startOfTime() - 0001-01-01
    2. Date.epoch() - 1970-01-01
    3. Date.endOfTime() - 9999-12-31

I'd be happy to contribute to this repos, if you'd let me.

Cheers!

Add Date.now

Could you please add Date.now to the package.

edit: removed Time.now as its already part of the package.

Date.now and Time.now should be factories

The current Date.now method is a getter.

The DateTime.now is a constructor.

  static Date get now => DateTime.now().date;

changes this to a factory for consistency

 Date.now() => DateTime.now().date;
Time.now() => DateTime.now().time;

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.